【设计模式】适配器模式
来源:互联网 发布:程序员中级考试 答案 编辑:程序博客网 时间:2024/06/15 09:33
使用频率:★★★★☆
一、什么是适配器
适配器是将一种接口改造成另外一种接口的一个包装类;
二、补充说明
有两种实现方式,一种是通过继承,另外一种通过组合;
使用组合实现的时候,跟装饰者模式有点类似,不过侧重点不同,装饰者模式是给对象增加新行为,适配器是为了适配接口;
优点:符合开闭原则;适配者类和目标类解耦;代码复用;
三、角色
目标接口
适配器类
适配者类
使用者
四、例子,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接口充电~
@author 风一样的码农
@blog_url http://www.cnblogs.com/chenpi/
分类: 设计模式
标签: DesignPattern, JAVA
好文要顶关注我 收藏该文 ![]()
![]()
0
0
«上一篇:【设计模式】原型模式
»下一篇:【设计模式】代理模式
»下一篇:【设计模式】代理模式
0 0
- 设计模式:适配器模式
- 设计模式------适配器模式
- 设计模式:适配器模式
- 设计模式---适配器模式
- 设计模式 适配器模式
- 设计模式 - 适配器模式
- 设计模式--适配器模式
- 设计模式-适配器模式
- 设计模式------适配器模式
- 设计模式---适配器模式
- 设计模式- 适配器模式
- 设计模式 - 适配器模式
- 设计模式:适配器模式
- 适配器模式--设计模式
- 设计模式 - 适配器模式
- 设计模式-适配器模式
- 设计模式---适配器模式
- 设计模式-适配器模式
- iOS工程中创建并使用一个SDK
- POJ 1137 The New Villa 笔记
- 使用QT创建系统托盘
- [leetcode]70. Climbing Stairs
- 矩形覆盖
- 【设计模式】适配器模式
- C++ Virtial
- monkey
- 使用PHP将Mysql数据表导出到Excel中
- ionic2数据库SQLite查询操作
- caffe-windows(CPU)配置与利用mnist数据集训练第一个caffemodel
- 不确定的有穷自动机的确定化代码-(子集法)
- string.split 匹配一个多个空格分割成string数组
- seq2seq 预测时 feed 自己的数据 (接上文)