适配器模式
来源:互联网 发布:中国网络作家数量 编辑:程序博客网 时间:2024/06/16 14:25
定义:将一个类的接口,转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间。
引用Head First设计模式上的场景:客户一直和Duck接口(目标接口)打交道,会用到一些Duck对象,如果Duck对象不够,就拿一些Turkey对象来凑。但是客户不能直接使用Turkey对象,需要转换一下,变成一个看起来像Duck的Turkey。
一个小例子:
(1)创建一个Target接口Duck.java
//目标接口public interface Duck { public void quack(); public void fly();}
(2)创建一个类MallardDuck实现Duck接口,这个类是真正的Duck。
/** * 绿头鸭 */public class MallardDuck implements Duck { public void quack() { System.out.println("鸭子“嘎嘎”叫"); } public void fly() { System.out.println("鸭子飞飞飞"); }}
(3)创建一个要适配的接口Turkey.java
public interface Turkey { // 要适配的接口 public void gobble(); public void fly();}
(4)创建一个类实现Turkey接口,这是真正的Turkey。
/** * 野火鸡 */public class WildTurkey implements Turkey { public void gobble() { System.out.println("野火鸡“咕咕”叫"); } public void fly() { System.out.println("野火鸡飞飞飞"); }}
(5)创建一个适配器TurkeyAdapter.java,实现Duck接口,使TurkeyAdapter“是一个”Duck,并且在类中传入要适配的对象的引用,这里用构造方法获得。
public class TurkeyAdapter implements Duck { Turkey turkey; public TurkeyAdapter(Turkey turkey) { this.turkey = turkey; } public void quack() { turkey.gobble(); } public void fly() { for(int i=0; i < 5; i++) { turkey.fly(); } }}
(4)创建测试类
public class DuckTestDrive { public static void main(String[] args) { MallardDuck duck = new MallardDuck();//创建鸭子对象 WildTurkey turkey = new WildTurkey();//创建火鸡对象 Duck turkeyAdapter = new TurkeyAdapter(turkey); System.out.println("火鸡动作------------------"); turkey.gobble(); turkey.fly(); System.out.println("鸭子动作------------------"); testDuck(duck); System.out.println("经过适配器适配变成鸭子的火鸡------------"); testDuck(turkeyAdapter); } static void testDuck(Duck duck) { duck.quack(); duck.fly(); }}
输出:
火鸡动作------------------野火鸡“咕咕”叫野火鸡飞飞飞鸭子动作------------------鸭子“嘎嘎”叫鸭子飞飞飞经过适配器适配变成鸭子的火鸡-------------------野火鸡“咕咕”叫野火鸡飞飞飞
从输出我们可以知道,客户已经可以使用被适配成鸭子的火鸡对象了。
上面的关系用图来表示如下:
小结:
创建适配器的原则就是:要适配成什么目标对象,就实现这个目标接口,要适配什么对象,就传入这个对象的引用,然后在实现目标接口的方法中调用被适配的对象的方法。这里就是:要适配成Duck目标对象,就实现Duck接口,要适配的对象是Turkey,就传入Turkey的引用(这里通过构造方法获得),然后在目标接口方法中调用Turkey对象的方法。
阅读全文
0 0
- 适配器及适配器模式
- 适配器及适配器模式
- 适配器模式(类适配器)
- 适配器模式(默认适配器)
- 适配器模式(对象适配器)
- 适配器模式-类适配器
- 适配器模式-对象适配器
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 在Windows下安装Node.js及环境配置
- 转:Sklearn-CrossValidation交叉验证
- 机器学习之分类模型实现
- [Android 5.1] 多用户管理UserManager相关整理
- unable to read TLD "META-INF/c.tld" jstl1.2.jar
- 适配器模式
- gdb调试多线程程序总结
- 金山云完成D轮融资 中国公有云IaaS市场三甲竞争格局初定
- Java-从url获取文件信息,压缩并导出
- 给咪蒙交智商税,值吗?
- 秒杀系统架构分析与实战
- 学习11
- 【胖张】spring拦截器自定义拦截
- springboot系列教程(三)——配置方式、多环境配置