设计模式-适配器模式
2018-09-10 01:03:32来源:博客园 阅读 ()
1、定义
适配器模式将一个类的接口,转换成客户期望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
2、实现方式
1)通过组合方式实现:
/** * 目标接口 */ public interface ThreePlugIf { /** * 使用三相电流供电 */ void powerWithThree(); }
客户端
package com.cn.shejimoshi.shipeiqimoshi; /** * 客户端 */ public class NoteBook { private ThreePlugIf threePlugIf; public NoteBook(ThreePlugIf threePlugIf) { this.threePlugIf = threePlugIf; } /** * 使用插座充电 */ public void charge(){ threePlugIf.powerWithThree(); } }
被适配的类
package com.cn.shejimoshi.shipeiqimoshi; /** *被适配类 */ public class GBTwoPlug { public void powerWithTwo(){ System.out.println("使用二相电流供电"); } }
适配器
package com.cn.shejimoshi.shipeiqimoshi; /** * 适配器 */ public class TwoPlugAdapter implements ThreePlugIf{ private GBTwoPlug gbTwoPlug; public TwoPlugAdapter(GBTwoPlug gbTwoPlug) { this.gbTwoPlug = gbTwoPlug; } public void powerWithThree() { System.out.println("转换--通过组合方式实现适配器模式"); gbTwoPlug.powerWithTwo(); } }
说明:适配器将GBTwoPlug 类的接口powerWithTwo,转换成客户NoteBook 期望的另外一个接口powerWithThree。使得原本不兼容的NoteBook 和GBTwoPlug类可以在一起工作。
2)通过继承方式实现
适配器修改为:
package com.cn.shejimoshi.shipeiqimoshi; public class TwoPlugAdaterExtend extends GBTwoPlug implements ThreePlugIf { public void powerWithThree() { System.out.println("转换--通过继承方式实现适配器模式"); powerWithTwo(); } }
测试方法
public class NoteBookTest { @Test public void charge(){//测试组合方式 GBTwoPlug gbTwoPlug=new GBTwoPlug(); ThreePlugIf threePlugIf=new TwoPlugAdapter(gbTwoPlug); NoteBook noteBook=new NoteBook(threePlugIf); noteBook.charge(); } @Test public void charge2(){//测试继承方式 ThreePlugIf threePlugIf=new TwoPlugAdaterExtend(); NoteBook noteBook=new NoteBook(threePlugIf); noteBook.charge(); } }
3、组合与继承实现方式的比较
- 组合方式:可以基于面向接口编程适配多个被适配类,比如将适配器中的GBTwoPlug 域改成某个接口,建议使用组合方式
- 继承方式:由于只能继承一个父类,故只能适配一个被适配类
4、适配器的作用
- 将目标类和适配者类解耦,通过引入一个适配器类重用现有的是配者类,而无需修改原有代码
- 通过适配器,客户端可以调用同一接口,因而对客户端来说是透明的
写在最后:
设计模式是一种经验总结、编程思想,拒绝代码的迷惑。
一种设计模式的代码变体可以有很多,但万变不离其宗。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 设计模式-委派/策略模式 2020-06-09
- 深入理解:设计模式中的七大设计原则 2020-06-07
- 设计模式---类之间的关系知多少 2020-06-07
- 你与面试官所了解的单例模式并不一样! 2020-06-06
- 高手眼中的观察者模式有什么不一样 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash