适配器(adapter)模式,把一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
适配器模式有两种形式,类的适配器模式和对象的适配器模式。我们先看类的适配器模式,类的适配器模式有以下角色:
目标(Target)角色:是期待得到的接口类型。这里谈类的适配器模式所以这个不能是类,原因是java单继承。
源(adaptee)角色:现有待适配的接口类型。
适配器(adapter)角色:适配器类模式的核心,这个角色负责把源接口转换成目标角色的接口。
类的适配器模式类图:
通过上图可以看出,组合对象Adapter持有源Adaptee的对象,利用聚合代替了继承,在Adapter里面的代码如下编写:
package adapter; /** * *作者:alaric *时间:2013-7-21下午6:44:53 *描述:目标类 */ public interface Target { public void operate1(); public void operate2(); }
package adapter; /** * *作者:alaric *时间:2013-7-21下午6:44:29 *描述:源 */ public class Adaptee { public void operate1(){ //业务逻辑 } }
package adapter; /** * *作者:alaric *时间:2013-7-21下午6:44:05 *描述:适配器类 */ public class Adapter extends Adaptee implements Target{ @Override public void operate2() { // 业务逻辑 } }
适配器类继承了源类,实现了目标类在源里没有的接口,达到了适配转换作用。java是单继承的语言,这种类的适配模式往往受到使用环境的限制,在面向对象设计原则中,有一条叫做组合/聚合复用原则,讲的是尽可能使用组合和聚合达到复用的目的而不是继承,所以一般推荐用对象适配器模式达到目的,对象适配器的角色和类的适配器模式的角色没什么具体的区别,只是类图不同,对象适配器模式的类图如下:
通过上图可以看出,组合对象Adapter持有源Adaptee的对象,利用聚合代替了继承,在Adapter里面的代码如下编写:
package adapter; /** * *作者:alaric *时间:2013-7-21下午6:44:05 *描述:适配器类 */ public class Adapter2 implements Target{ private Adaptee adaptee; public Adapter2(Adaptee adaptee) { super(); this.adaptee = adaptee; } @Override public void operate2() { // 业务逻辑 } @Override public void operate1() { //调用源的方法 adaptee.operate1(); } }
为了不改变原有系统的实现而对目标接口需求的满足而做适配,利用具体的类的适配器模式还是对象的适配器模式,要根据具体的业务场景,如果两种都可以的话最好选择对象的适配器模式,适配器模式使得原本不能在一起工作的类在一起工作成为可能。但是对于变化很大的系统对每个接口都写一个适配器类变的很难维护,这时候应该考虑对原有代码的重构,而不是系统中存在大量的适配器类。
ps:最近重新学习设计模式,所写相关笔记纯属个人对书本和资料的理解,如有不到之处请大家指出,共同探讨学习设计模式。
设计模式系列目录:
相关推荐
浅析Java设计模式【2】——适配器
Java设计模式,目录:前言,UML建模技术,深入浅出UML类图,从招式与内功谈起——设计模式概述,面向对象设计原则,工厂三兄弟之简单工厂模式,工厂三兄弟之工厂方法模式,工厂三兄弟之抽象工厂模式,确保对象的唯一...
目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式
JAVA设计模式总结之23种设计模式 一:设计模式之六大原则 总原则:开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。 1.Abstract Factory(抽象工厂模式) 2.Adapter(适配器模式)......
设计模式趣味学习(复习) 设计模式趣味学习(复习) 设计模式与足球(一) 设计模式与足球(二) 设计模式与足球(三) 设计模式与足球(四) 设计模式综合应用实例 设计模式综合应用实例 多人联机射击游戏 多人...
4.4.2现实中的装饰模式——相架 126 4.4.3C#实例——图书馆中的项目 127 4.4.4Java实例——自定义JButton 131 4.4.5优势和缺陷 133 4.4.6应用情景 134 4.5FacadePattern(外观模式) 134 4.5.1定义 134 4.5.2...
4.4.2现实中的装饰模式——相架 126 4.4.3C#实例——图书馆中的项目 127 4.4.4Java实例——自定义JButton 131 4.4.5优势和缺陷 133 4.4.6应用情景 134 4.5FacadePattern(外观模式) 134 4.5.1定义 134 4.5.2...
java和设计模式ppt包含工厂模式、建造模式、原始模型模式、单例模式、结构模式、适配器、桥梁模式、合成模式、装饰模式、门面模式、享元模式、代理模式、行为模式、解释器模式、迭代子模式、调停者模式、备忘录模式...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
(3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象...
关于java程序员发展需要学习的路线整理集合 技术 应用技术 计算机基础知识 cpu mem disk net 线程,进程 第三方库 poi Jsoup zxing Gson 数据结构 树 栈 链表 队列 图 操作系统 linux 代码控制...
(3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
针对23种设计模式,分别写了demo并画了类图帮助理解。 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
(3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象...