软件体系结构-适配器模式

定义

结构型设计模式

适配器模式:将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。

UML类图

三个部分:目标抽象类,适配器类,适配者类

**类适配器:**Java不支持多继承,目标抽象类只能是接口

对象适配器:

缺省适配器模式:

当不需要实现一个接口所提供的所有方法时,可先设计一个抽象类实现该接口,并为接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可以选择性地覆盖父类的某些方法来实现需求,它适用于不想使用一个接口中的所有方法的情况,又称为单接口适配器模式。

实例:

代码

目标类

1
2
3
public abstract class DataProcessor {
public abstract String encode(String str);
}

适配器类

1
2
3
4
5
6
7
8
9
10
11
12
13
public class EnciphterAdapter extends DataProcessor {
//持有适配者的引用
private Encipher encipher;

public EnciphterAdapter(Encipher new_encipher){
encipher = new_encipher;
}

@Override
public String encode(String str){
return encipher.encode(str);
}
}

适配者类

1
2
3
4
5
public class Encipher {
public String encode(String str){
return "歪比巴卜";
}
}

客户端类

1
2
3
4
5
6
public class Client {
public static void main(String[] args) {
DataProcessor dataProcessor = new EnciphterAdapter(new Encipher());
System.out.println(dataProcessor.encode("132"));
}
}

优点

  • 将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构
  • 增加了类的透明性和复用性,提高了适配者的复用性,同一个适配者类可以在多个不同的系统中复用
  • 灵活性和扩展性非常好
  • **类适配器模式:**置换一些适配者的方法很方便
  • **对象适配器模式:**可以把多个不同的适配者适配到同一个目标,还可以适配一个适配者的子类

缺点

  • 类适配器模式:
    1. 一次最多只能适配一个适配者类,不能同时适配多个适配者;
    2. 适配者类不能为final;
    3. 目标抽象类只能为接口,不能为类
  • 对象适配器模式:在适配器中置换适配者类的某些方法比较麻烦

适用

系统需要使用一些现有的类,但是这些类的接口不符合系统的需要,甚至无源代码。创建一个可以重复使用的类,用于和一些无太大关联的类联动。