操作,此处省略 1 ) 8天津大学硕士学位论文 第二章设计模式研究2.2.3适配器模式(Adapter) 适配器把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
用电器做例子,美国的电器插头一般是三相的,即阳极,阴极,地极。
中国的建筑物内的电源插座一般只有两极,没有地极.这时候,即便电器可以接受220v电压,电源插座和插头不匹配也就使得电器无法使用。
一个三相到两相的转换器(适配器)就能解决这个问题。
适配器有两种形式:类的适配器和对象的适配器。
两者的区别在于:类的适配器用继承实现,对象的适配器用委派关系实现,本文只讨论类的适配器。
>类的适配器涉及角色有 1.目标(Target)角色:目标角色是所期待的接口.由一个接口扮演。
Target.java public interface Target{ f蚺 牛类Adaptee包含操作sampleOperationl. 鼻| void sampleOrIerationl 0: |聃 鸪瞧Adaptee不包含操作sampleOperation 2. 警| void sampleOperation2 0: } 2.源角色(Adaptee)角色:现有的接口,将被适配到Target上去,如: Adaptee.java public class Adaptee{ public void sampleOperationl(){J } 9天津大学硕士学位论文 第二章设计模式研究 3.适配器(Adapter)角色:将源接口转换到目标接口上去。
由一个具体类扮演,如: Adapter.java public class Adapter extends Adaptee implements Target{ public void sampleOperation20{ ?7具体代码 J } Adapter在继承Adaptee后,补足一些未实现的功能,或者override一些方法,从而实现Target接口. 类适配器总结: 1)源的子类无法和源使用同一个适配器; 2)实现时可以override源的方法。
>对象适配器涉及角色有 1.目标(Target)角色:目标角色是所期待的接口.由一个接口扮演,也可 以是一个抽象/具体类,如: Target.java public interface Target{ j聃 ·类kdaptee包含操作sampleOperationl. 卑| void sampleOperationl 0: |蚺 宰类Adaptee不包含操作sampleOperation2 卑| void s£LmpleOperation2 0: ) 10天津大学硕士学位论文 第二章设计模式研究 2.源角色(Adaptee)角色:现有的接口.将被适配到Target上去,如: Adaptee.Java public class Adaptee{ public void sampleOperationl 0{) } 3.适配器(Adapter)角色:将源接口转换到目标接口上去。
由一个具体类扮演对象Adapter的定义方法,如: Adapter.Java publ ic class Adapter implements Target{ private Adaptee adaptee: public Adapter(Adaptee adaptee){ super0: this.adaptee=adaptee: } public void sampleOperationl 0 f adaptee.sampleOperationl(): l public void sampleOperation2 0{ //具体代码 ) } 对象适配器总结: 1)源类和源类的子类都可以通过同一个适配器适配到同一个目标; 2)不太容易置换源类的方法; 3)易于增加新的方法; 使用适配器的情况: 1)系统需要使用现有的类, 而此类的接口不符合系统的需要; 2)想要建立一个可以重复使用的类,用于与一些彼此之间没