设计模式(七) 适配器模式

来源:互联网 发布:centos 7 route add 编辑:程序博客网 时间:2024/05/16 15:23

Adapter Pattern

1. 什么是适配器模式

适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

适配器模式将一个类的接口适配成用户所期待的。一个适配器通常允许因为接口不兼容而不能一起工作的类能够在一起工作,做法是将类自己的接口包裹在一个已存在的类中。

在适配器模式中引入了一个被称为适配器(Adapter)的包装类,而它所包装的对象称为适配者(Adaptee),即被适配的类。适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用。

更多请参考:适配器模式原理及实例介绍

2. 适配器模式类角色解析

适配器模式结构图:
适配器模式

  • Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。
  • Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系。
  • Adaptee(适配者类): 适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码。

3. 实操感想

要理解适配器模式,它让你可以在不改变原来调用方式下进行调用,仅仅转接一层就能实现,使整个系统不用大动干戈。

要在合适的情况下使用,就能发现看似简单的适配器模式能起到很大的作用。

4. 代码示例

典型代码示例,对要适配类进行一层封装Wrapper,进行一层转发:

class Adapter extends Target {      private Adaptee adaptee; //持有一个对适配者对象的引用      public Adapter(Adaptee adaptee) {          this.adaptee=adaptee;      }      public void request() {          adaptee.specificRequest(); //转发调用      }  }  

另外一个很好的例子: 一个示例让你明白适配器模式

0 0