适配器模式
来源:互联网 发布:深入浅出python pdf 编辑:程序博客网 时间:2024/05/21 06:31
1. 适配器的原理
火鸡冒充鸭子
一个公司做鸭子产品,一个公司做火鸡产品。
如果火鸡公司想要做鸭子产品,通过火鸡适配器,让火鸡在外界的形象看起来就是鸭子,但内部所调用的东西都依然是火鸡的。
代码实现
对象适配器
构造方法内传入的是需要被适配的那个对象
/** * 火鸡冒充鸭子 * Created by Administrator on 2017/6/24. */public interface Duck { public void quack(); public void fly();}/** * 鸭子实现类,绿头鸭 * Created by Administrator on 2017/6/24. */public class GreenHeadDuck implements Duck { public void quack() { System.out.println("Ga Ga Ga"); } public void fly() { System.out.println("I am flying a long distance"); }}/** * 火鸡接口 * Created by Administrator on 2017/6/24. */public interface Turkey { public void gobble(); public void fly();}/** * 火鸡实现类,野火鸡 * Created by Administrator on 2017/6/24. */public class WildTurkey implements Turkey { public void gobble() { System.out.println("Go Go Go"); } public void fly() { System.out.println("I am flying a short distance"); }}/** * 火鸡适配器,对外展现鸭子的特性,方法是鸭子的方法,调用内容依旧是火鸡 * Created by Administrator on 2017/6/24. */public class TurkeyAdapter implements Duck { private 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(); } }}//测试类public class Test { public static void main(String[] args) { GreenHeadDuck greenHeadDuck = new GreenHeadDuck(); WildTurkey wildTurkey = new WildTurkey(); Duck duck = new TurkeyAdapter(wildTurkey); greenHeadDuck.quack(); greenHeadDuck.fly(); wildTurkey.gobble(); wildTurkey.fly(); duck.quack(); duck.fly(); }}
2. 对象适配器和类适配器
类适配器
适配器要继承被适配者的类,和实现目标接口。
/* *适配器的类,其他类同上 *需要将火鸡转为鸭子,火鸡是被适配类,鸭子是目标类 *继承野火鸡类,实现鸭子接口 */public class TurkeyAdapter extends WildTurkey implements Duck { public void quack() { super.gobble(); } public void fly(){ super.fly(); super.fly(); super.fly(); }}
对象适配器和类适配器的差异
3. 从枚举器到迭代器的适配
从老版本的枚举器如何通过适配的方式升级到迭代器
通过对象适配器的形式,进行构建
public class EnumerationIterator implements Iterator<Object> { private Enumeration enumeration; public EnumerationIterator(Enumeration enumeration){ this.enumeration = enumeration; } public boolean hasNext() { return enumeration.hasMoreElements(); } public Object next() { return enumeration.nextElement(); } public void remove() { throw new UnsupportedOperationException(); }}
阅读全文
0 1
- 适配器及适配器模式
- 适配器及适配器模式
- 适配器模式(类适配器)
- 适配器模式(默认适配器)
- 适配器模式(对象适配器)
- 适配器模式-类适配器
- 适配器模式-对象适配器
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 使用Ajax异步加载请求JSON数据
- 小练习
- 容器如何访问外部世界?- 每天5分钟玩转 Docker 容器技术(36)
- POI生成WORD文档
- linux正则表达式
- 适配器模式
- AdjustTokenPrivileges失败的解决方法
- 一些编程的规范
- Python练习12----lambda
- Linux:如何使用gdb调试多进程多线程程序
- (vue.js)vue-cli构建,scss文件引入本地css意外报错
- Keyboard Row
- Hive原理
- Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法