Java设计模式之适配器模式
来源:互联网 发布:商家怎么开通淘宝客 编辑:程序博客网 时间:2024/06/05 16:50
引用的视频:模式的秘密-适配器模式-慕课网
适配器分析
看到图片的朋友可能会一脸懵逼,下面我就举例一个简单例子说明一下:
比如你买了一部港版的iPhone X,它的充电线是三脚插头,而你仅有现在全都是两脚的插座,这个时候你的iPhone X要充电就必须要一个转换器啦
这里的三脚插足是target,adaptee是全都是两脚的插座,Adapter是转换器,Client是iPhone X
1.iPhoneX
/** * Client */public class IPhoneX { private ThreePlugs threePlugs; public IPhoneX(ThreePlugs threePlugs) { this.threePlugs = threePlugs; } public void charge() { threePlugs.chargeWithThreePlugs(); } public static void main(String... args) { TwoPlugs twoPlugs = new TwoPlugs(); //这里便要思考一下iPhone X怎么充电了??? ThreePlugs threePlugs = new AdapterImpl(twoPlugs); IPhoneX iPhoneX = new IPhoneX(threePlugs); iPhoneX.charge(); }}
2.ThreePlugs
/** * 港版iPhone X使用的插头 */public interface ThreePlugs { /** * 使用三脚插头为iPhone X充电 */ void chargeWithThreePlugs();}
3.TwoPlugs
/** * 使用二脚插座为iPhone X充电 */public class TwoPlugs { public void chargeWithTwoPlugs() { System.out.println("使用二脚插座为iPhone X充电"); }}
4.AdapterImpl(使用组合的方式解决-推荐)
/** * 使用组合的方式三脚转换为二脚 */public class AdapterImpl implements ThreePlugs { private TwoPlugs twoPlugs; public AdapterImpl(TwoPlugs twoPlugs) { this.twoPlugs = twoPlugs; } @Override public void chargeWithThreePlugs() { System.out.println("使用组合的方式实现兼容充电"); twoPlugs.chargeWithTwoPlugs(); }}
5.AdapterExtends(使用继承的方式解决)
/** * 使用继承的方式兼容 */public class AdapterExtends extends TwoPlugs implements ThreePlugs { @Override public void chargeWithThreePlugs() { System.out.println("通过继承的方式实现兼容充电"); this.chargeWithTwoPlugs(); }}
结果:
适配器分类
- 组合
- 采用组合方式的适配器成为对象适配器
- 特点:把”被适配器”作为一个对象组合到适配器类中,以修改目标接头包装被适配者
- 继承
- 采用继承方式的称为类适配器
- 特点:通过多重继承不兼容接口,实现对目标接口的匹配,单一的为某个类而实现适配
作用
阅读全文
0 0
- java设计模式之适配器设计模式
- java设计模式之适配器设计模式
- JAVA设计模式之适配器
- 深入浅出Java设计模式之适配器模式
- 深入浅出Java设计模式之适配器模式
- Java设计模式之适配器模式
- 深入浅出Java设计模式之适配器模式
- Java设计模式之适配器模式
- java 设计模式之七-适配器模式
- java设计模式之适配器模式
- Java设计模式之适配器模式
- java设计模式之适配器模式
- Java:设计模式之适配器模式Adapter
- java设计模式之适配器模式
- java设计模式之适配器模式
- Java设计模式之适配器模式
- Java设计模式之适配器模式
- java与设计模式之适配器模式
- spring in action 学习笔记三:对spring 容器的理解,以及如何利用AnnotationConfigApplicationContext这个容器创建对象
- stm32 无初值指针变量导致程序跑飞
- SDNU_ICPC1075(汉诺塔)(函数递归)
- Java异常处理机制
- JQuery实现购物车功能.
- Java设计模式之适配器模式
- 公司项目Android8.0适配分析
- 【python】生成笛卡尔积(交叉表)DataFrame和numpy
- 例说STM32F7高速缓存——Cache一致性问题(二)
- weex将js打包到客户端中
- javascript更新元素加载延迟及图片src
- 旧键盘 (20)
- thymeleaf方言和处理器简介
- js作用域的常见错误