【设计模式】适配器模式
2016-02-13 22:48
489 查看
重要程度:★★★★☆
一、什么是适配器
适配器是将一种接口改造成另外一种接口的一个包装类;二、补充说明
有两种实现方式,一种是通过继承,另外一种通过组合;使用组合实现的时候,跟装饰者模式有点类似,不过侧重点不同,装饰者模式是给对象增加新行为,适配器是为了适配接口;
优点:符合开闭原则;适配者类和目标类解耦;代码复用;
三、角色
目标接口适配器类
适配者类
使用者
四、例子,JAVA实现
简介:现有一个USB接口和一个PSP接口实现类,功能都是进行充电,该例子的目的就是对PSP接口实现类进行包装,使之能用USB接口充电;目标接口,使用USB接口充电
package com.pichen.dp.structuralpattern; public interface IUSB { public void charge(); }
一个USB接口的实现类(该类不属于适配器模式中的角色,只是一个对比)
package com.pichen.dp.structuralpattern; public class HPUSB implements IUSB{ @Override public void charge() { System.out.println("使用惠普USB接口充电~"); } }
适配者类,使用PSP充电
package com.pichen.dp.structuralpattern; public class PSP { public void pspCharge(){ System.out.println("使用PSP接口充电~"); } }
适配器类(继承方式),继承PSP类,并实现IUSB接口
package com.pichen.dp.structuralpattern; public class PSPAdapter extends PSP implements IUSB{ @Override public void charge() { super.pspCharge(); } }
适配器类(组合方式),组合PSP对象,并实现IUSB接口
package com.pichen.dp.structuralpattern; public class PSPAdapter2 implements IUSB{ private PSP psp; public PSPAdapter2(PSP psp) { this.psp = psp; } @Override public void charge() { psp.pspCharge(); } }
使用者Main,测试结果
package com.pichen.dp.structuralpattern; public class Main { public static void main(String[] args) { IUSB usb = new HPUSB(); usb.charge(); IUSB usb_psp = new PSPAdapter();//继承 usb_psp.charge(); IUSB usb_psp2 = new PSPAdapter2(new PSP());//组合 usb_psp2.charge(); } }
打印结果:
使用惠普USB接口充电~ 使用PSP接口充电~ 使用PSP接口充电~
相关文章推荐
- 一个快速double转int的方法(利用magic number)
- Atitit. Ati IDE 开发平台的第一版规划
- 灭屏状态下,如何实现按某个键可点亮屏幕
- Atitit. Ati IDE 开发平台的第一版规划
- freeswitch编译
- adb not responding if youd like to retry...的解决方法
- Atitit. Ati IDE 开发平台的第一版规划
- LeetCode 70. Climbing Stairs
- 面试笔试杂项积累-leetcode 261-270
- NYOJ 次方求模102
- sqlite3 for linux
- Listview实现不同类型的布局
- sandbox沙盒介绍以及如何取得沙盒里面各文件的路径,图片导入方式和图片路径获取
- where、group by、having使用
- javascript基础:逻辑运算符
- MyBatis日记
- C语言 extern 经常出错的一处
- HDU 5627 Clarke and MST(贪心、连通性)
- Don't Call Yourself A Programmer, And Other Career
- 约瑟夫问题的单向循环链表的代码实现