适配器模式Adapter
来源:互联网 发布:sigmaplot linux 编辑:程序博客网 时间:2024/06/11 12:02
- 前言
- 示例说明
- 源码下载
- 类适配器模式
- UML
- 示例代码
- 测试结果
- 对象适配器模式
- UML
- 示例代码
- 测试结果
前言
Convert the interface of a class into another interface clients expect.Adapter lets classes work together that couldn’t otherwise
because of incompatible interfaces.将一个类的接口变成客户端所期待的另一个接口,从而使原本因接口不匹配而无法一起工作的两个类能够一起工作。
示例说明
通过球员的进攻防守说明,美国的前锋、中锋、后卫的进攻attack()、防守guard()用英文输出
中国球员的进攻防守进攻用进攻()、防守用防守()用英文输出 (起中文函数名实属无奈,只是为了更好的区分,有强迫症的请忽略…)
然后在客户端测试时,不论中国球员还是美国球员都是进攻调用attack()方法、防守调用guard()方法
源码下载
GitHub:https://github.com/YEN-GitHub/PatternDemo/tree/master/src/StructuralPattern/AdapterPattern
类适配器模式
UML
示例代码
package StructuralPattern.AdapterPattern.demo2;/** * Created by yangenneng on 2017-05-10 21:51 * Abstract: */public interface AmericanPlayer { //进攻 public void attack(); //防守 public void guard();}
package StructuralPattern.AdapterPattern.demo2;import StructuralPattern.AdapterPattern.demo2.AmericanPlayer;/** * Created by yangenneng on 2017-05-10 21:32 * Abstract:前锋 */public class Forward implements AmericanPlayer { private String name; public Forward(String name){this.name=name;} //进攻 public void attack(){ System.out.println("American Player Forward:"+name+" attack"); } //防守 public void guard(){ System.out.println("American Player Forward:"+name+" guard"); }}
package StructuralPattern.AdapterPattern.demo2;/** * Created by yangenneng on 2017-05-10 21:35 * Abstract:中锋 */public class Centre implements AmericanPlayer { private String name; public Centre(String name){this.name=name;} //进攻 public void attack(){ System.out.println("American Player Centre:"+name+" attack"); } //防守 public void guard(){ System.out.println("American Player Centre:"+name+" guard"); }}
package StructuralPattern.AdapterPattern.demo2;import StructuralPattern.AdapterPattern.demo2.AmericanPlayer;/** * Created by yangenneng on 2017-05-10 21:37 * Abstract:后卫 */public class Guard implements AmericanPlayer { private String name; public Guard(String name){this.name=name;} //进攻 public void attack(){ System.out.println("American Player Guard:"+name+" attack"); } //防守 public void guard(){ System.out.println("American Player Guard:"+name+" guard"); }}
package StructuralPattern.AdapterPattern.demo2;/** * Created by yangenneng on 2017-05-10 21:37 * Abstract:中国球员 */public class ChinaPlayer { protected String name; public ChinaPlayer(String name){this.name=name;} //进攻 public void 进攻(){ System.out.println("中国球员:"+name+"进攻"); } //防守 public void 防守(){ System.out.println("中国球员:"+name+"防守"); }}
package StructuralPattern.AdapterPattern.demo2;/** * Created by yangenneng on 2017-05-10 21:56 * Abstract: */public class Adapter extends ChinaPlayer implements AmericanPlayer{ public Adapter(String name) { super(name); } @Override public void attack() { super.进攻(); } @Override public void guard() { super.防守(); }}
package StructuralPattern.AdapterPattern.demo2;/** * Created by yangenneng on 2017-05-10 21:59 * Abstract:客户端测试 */public class Client { public static void main(String[] args) { System.out.println("类适配器模式"); AmericanPlayer americanPlayer1=new Forward("aaa"); AmericanPlayer americanPlayer2=new Centre("bbb"); AmericanPlayer americanPlayer3=new Guard("ccc"); Adapter chinaPlayer1=new Adapter("姚明"); //进攻 都是调用attack方法 americanPlayer1.attack(); americanPlayer2.attack(); americanPlayer3.attack(); chinaPlayer1.attack(); System.out.println(); //防守 都是调用guard方法 americanPlayer1.guard(); americanPlayer2.guard(); americanPlayer3.guard(); chinaPlayer1.guard(); }}
测试结果
对象适配器模式
UML
示例代码
package StructuralPattern.AdapterPattern.demo1;/** * Created by yangenneng on 2017-05-10 21:30 * Abstract:美国球员 */public class AmericanPlayer { protected String name; public AmericanPlayer(String name){this.name=name;} //进攻 public void attack(){ } //防守 public void guard(){ }}
package StructuralPattern.AdapterPattern.demo1;/** * Created by yangenneng on 2017-05-10 21:32 * Abstract:前锋 */public class Forward extends AmericanPlayer{ public Forward(String name) { super(name); } //进攻 public void attack(){ System.out.println("American Player Forward:"+name+" attack"); } //防守 public void guard(){ System.out.println("American Player Forward:"+name+" guard"); }}
package StructuralPattern.AdapterPattern.demo1;/** * Created by yangenneng on 2017-05-10 21:35 * Abstract:中锋 */public class Centre extends AmericanPlayer { public Centre(String name) { super(name); } //进攻 public void attack(){ System.out.println("American Player Centre:"+name+" attack"); } //防守 public void guard(){ System.out.println("American Player Centre:"+name+" guard"); }}
package StructuralPattern.AdapterPattern.demo1;/** * Created by yangenneng on 2017-05-10 21:37 * Abstract:后卫 */public class Guard extends AmericanPlayer { public Guard(String name) { super(name); } //进攻 public void attack(){ System.out.println("American Player Guard:"+name+" attack"); } //防守 public void guard(){ System.out.println("American Player Guard:"+name+" guard"); }}
package StructuralPattern.AdapterPattern.demo1;/** * Created by yangenneng on 2017-05-10 21:37 * Abstract:中国球员 */public class ChinaPlayer { protected String name; public ChinaPlayer(String name){this.name=name;} //进攻 public void 进攻(){ System.out.println("中国球员:"+name+"进攻"); } //防守 public void 防守(){ System.out.println("中国球员:"+name+"防守"); }}
package StructuralPattern.AdapterPattern.demo1;import StructuralPattern.AdapterPattern.demo1.*;/** * Created by yangenneng on 2017-05-10 21:42 * Abstract: */public class Adapter extends AmericanPlayer { private ChinaPlayer chinaPlayer=null; public Adapter(String name){ super(name); chinaPlayer=new ChinaPlayer(name); } //进攻 public void attack(){ chinaPlayer.进攻(); } //防守 public void guard(){ chinaPlayer.防守(); }}
package StructuralPattern.AdapterPattern.demo1;/** * Created by yangenneng on 2017-05-10 21:44 * Abstract:客户端测试代码 */public class Client { public static void main(String[] args) { System.out.println("对象适配器模式"); AmericanPlayer americanPlayer1=new Forward("aaa"); AmericanPlayer americanPlayer2=new Centre("bbb"); AmericanPlayer americanPlayer3=new Guard("ccc"); Adapter chinaPlayer1=new Adapter("姚明"); //进攻 都是调用attack方法 americanPlayer1.attack(); americanPlayer2.attack(); americanPlayer3.attack(); chinaPlayer1.attack(); System.out.println(); //防守 都是调用guard方法 americanPlayer1.guard(); americanPlayer2.guard(); americanPlayer3.guard(); chinaPlayer1.guard(); }}
测试结果
0 0
- Adapter模式 适配器模式
- 适配器模式(Adapter)
- 适配器模式(Adapter)
- 适配器(Adapter)模式
- 适配器模式(Adapter Pattern)
- ADAPTER(适配器)模式
- 适配器模式(adapter)
- Adapter适配器模式
- 适配器(Adapter)模式
- 适配器模式(Adapter Pattern)
- Adapter(适配器)模式
- 适配器模式(adapter)
- 适配器模式(Adapter)
- 适配器模式(Adapter)
- 适配器模式(Adapter)
- 适配器模式 Adapter Pattern
- Adapter 适配器模式
- 适配器模式(Adapter)
- Pycharm+SSH远程连接tensorflow
- Java WebService 简单实例
- 5-52 单词长度 (15分)
- hibernate的小问题
- 如鹏java学习进程 将输入的正整数相加,ok结尾
- 适配器模式Adapter
- 问题记录:myeclipse配置好struts2后,web项目运行出现404
- c++创建线性链表记录学生信息
- 计蒜客 跳跃游戏 贪心
- Android开发:Toolbar基本使用和自定义Toolbar
- try 代码块中含 return 语句时,代码执行顺序
- 浅淡Webservice、WSDL三种服务访问的方式(附案例)
- LVM介绍及使用
- COJ-1060-Nearest Sequence