设计模式 - 适配器模式(Adapter)

定义

将某个类的接口转换成客户端期望的另一个接口表示。Adapter 模式让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)。

类型

结构性模式

适用性

以下情况适用Adapter 模式:

  1. 希望使用一个已经存在的类,而它的接口不符合需求;
  2. 希望创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作;
  3. 希望使用一些已经存在的子类,但是不可能对每一个子类都进行子类化以匹配他们的接口。(仅适用于对象 Adapter, 对象Adapter 可以适配它的父类接口)

类图

类适配器使用多重继承对一个接口和另一个接口进行匹配: 类适配器结构

对象适配器依赖于对象组合: 对象适配器结构

参与者

  1. Target: 定义 Client 使用的与特定领域相关的接口;
  2. Client: 与符合 Target 的对象协同;
  3. Adaptee: 定义一个已经存在的接口,这个接口需要适配;
  4. Adapter: 对 Adaptee 接口与 Target 接口进行适配.

代码样例

源角色Adaptee

public class Adaptee { 
    public int get220v(){ 
       return 220; 
    } 
}

目标角色Target

public interface Target { 
    int get110v(); 
    int get220v(); 
}

适配器角色Adapter

Adapter 扩展源角色,实现目标角色,从而使得目标角色改动时候,不用改动源角色,只要改动适配器

public class Adapter extends Adaptee implements Target{ 
    public int get110v(){ 
        return 110; 
    } 
}

客户端

public class Client { 
    public static void main(String rags[]) { 
        new Client().test(); 
    } 

    public void test() { 
        Target target = new Adapter(); 
        int v1 = target.get110v(); 
        int v2 = target.get220v(); 
    } 
}

参考代码

https://github.com/xueyufish/design-pattern-java/tree/master/adapter