【设计模式】适配器模式
2015-04-20 23:11
197 查看
适配器模式:把一个类的接口变换成客户端所期待的另外一个接口,使接口不兼容的那些类可以一起工作,这样的做法像是货物的包装过程,因此也被成为包装模式。
适配器模式有类的适配器模式和对象的适配器模式两种不同的形式。在类的适配器模式中,适配器与适配者之间是继承(或实现)的关系,如下图所示,类的适配器模式包括3个角色。
目标角色定义了客户所需的接口,适配者是现有需要适配的接口,由图可见,Adaptee没有方法operation2,需要适配,适配器Adapter作为转换器对Adaptee和Target进行适配。
具体代码如下:
由于Java、C#等语言不支持多重继承,因此类适配器模式的使用受到限制,所以在实际应用当中对象适配器模式的使用频率更高。
对象适配器模式与类适配器模式一样,把被适配的类的API转换成为目标类的API。所不同的是,对象的适配器模式不是使用继承关系连接到Adaptee类的,而是使用委派关系连接到Adaptee类。同样对象适配器模式也包含3个角色:
在这里,Adapter类包装了一个Adaptee类的实例,从而把Adaptee的API与Target类的API连接起来,Adapter与Aadptee是委派关系。
具体代码如下:
缺省适配器模式
缺省适配器模式是适配器模式的一种变形,应用也很广泛。当不需要实现一个接口提供的所有方法时,可以先设计一个抽象类实现该接口,并为接口的每个方法提供一个默认的实现(空方法),这样抽象类的子类就可以根据需要去覆盖父类的某些方法,而不需要实现所有的方法。
缺省适配器模式包含3个角色,分别是:
适配器接口:一个声明了大量方法的接口。
缺省适配器类:是一个实现了适配器接口的抽象类。
具体业务类:继承缺省适配器类,是缺省适配器类的子类,根据业务需求去覆盖父类的方法。
一个经典的例子:JDK类库中的事件处理包java.awt.event中就广泛使用了缺省适配器模式,如:MouseAdapter、KeyAdapter等。
Author:立礼
Sign:人生不要有太多的幻想,而要有更多的行动。
适配器模式有类的适配器模式和对象的适配器模式两种不同的形式。在类的适配器模式中,适配器与适配者之间是继承(或实现)的关系,如下图所示,类的适配器模式包括3个角色。
目标角色定义了客户所需的接口,适配者是现有需要适配的接口,由图可见,Adaptee没有方法operation2,需要适配,适配器Adapter作为转换器对Adaptee和Target进行适配。
具体代码如下:
public interface Target{ public void operation1(); public void operation2(); } public class Adaptee{ public void operation1(){} } public class Adapter extends Adaptee implements Target{ //因为Adaptee没有这个方法,因此在适配器上补充该方法 public void operation2(){ // do something } }
由于Java、C#等语言不支持多重继承,因此类适配器模式的使用受到限制,所以在实际应用当中对象适配器模式的使用频率更高。
对象适配器模式与类适配器模式一样,把被适配的类的API转换成为目标类的API。所不同的是,对象的适配器模式不是使用继承关系连接到Adaptee类的,而是使用委派关系连接到Adaptee类。同样对象适配器模式也包含3个角色:
在这里,Adapter类包装了一个Adaptee类的实例,从而把Adaptee的API与Target类的API连接起来,Adapter与Aadptee是委派关系。
具体代码如下:
public interface Target{ public void operation1(); public void operation2(); } public class Adaptee{ public void operation1(){} } public class Adapter implements Target{ private Adaptee adaptee; public Adapter(Adaptee adaptee){ super(); this.adaptee = adaptee; } public void operation1(){ adaptee.operation1();//Adaptee中有该方法,所以适配器直接委派operation1() } public void operation2(){ // do something } }
缺省适配器模式
缺省适配器模式是适配器模式的一种变形,应用也很广泛。当不需要实现一个接口提供的所有方法时,可以先设计一个抽象类实现该接口,并为接口的每个方法提供一个默认的实现(空方法),这样抽象类的子类就可以根据需要去覆盖父类的某些方法,而不需要实现所有的方法。
缺省适配器模式包含3个角色,分别是:
适配器接口:一个声明了大量方法的接口。
缺省适配器类:是一个实现了适配器接口的抽象类。
具体业务类:继承缺省适配器类,是缺省适配器类的子类,根据业务需求去覆盖父类的方法。
一个经典的例子:JDK类库中的事件处理包java.awt.event中就广泛使用了缺省适配器模式,如:MouseAdapter、KeyAdapter等。
Author:立礼
Sign:人生不要有太多的幻想,而要有更多的行动。
相关文章推荐
- 设计模式学习-适配器模式(结构型)
- 设计模式—适配器模式
- 设计模式之适配器模式
- Adapter 适配器模式(设计模式03)
- HeadFirst设计模式之适配器模式
- java设计模式:适配器模式
- 设计模式-适配器模式
- Java设计模式之适配器模式
- 设计模式之适配器模式
- 实例解析Java设计模式编程中的适配器模式使用
- 【笨鸟先飞】Java重新学习日记20--设计模式之适配器模式
- C#设计模式系列:适配器模式(Adapter Pattern)
- 设计模式6 - 适配器模式Adapter
- Java常用的设计模式06:常用设计模式之适配器模式(结构型模式)
- 一头扎进设计模式-适配器模式
- java 设计模式之适配器模式
- java设计模式之适配器模式
- 设计模式系列3--适配器模式
- 设计模式练习(6)——适配器模式
- 设计模式笔记之适配器模式