一.模式定义
- 结构型模式之一,将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。
- 在不改变现有事物的内部结构下,使原本不兼容的事物能够协同工作。
二.模式结构
1.适配器模式分为类适配器模式和对象适配器模式
- 目标抽象类:Target,该角色为原有的接口/类,即希望被添加功能的类/接口。
- 适配者类: Adaptee ,原有的接口,也是希望被适配的接口,将该类的方法添加给目标抽象类。
- 适配器: Adapter, 将被适配者和目标抽象类组合到一起的类。
2.类适配器
需要注意的是,由于Java的单继承机制,Target只能是接口,由适配者去实现这个接口。
- 适配者类: Adaptee
public class Adaptee { public void adapterRequest(){ System.out.println("被适配者的方法"); } }
- 目标抽象:Target接口
public interface Target {
void request();
}
- 适配器: Adapter
public class Adapter extends Adaptee implements Target {
@Override
public void request() {
super.adapterRequest();
}
}
3.对象适配器
需要注意的是,适配器类需要去关联适配者类,即创建一个适配者类(Adaptee)的实例对象作为适配器类的属性。
三.模式适用环境
1.适应情况
系统需要使用一个已存在的类,但是它却不符合现有的接口规范。
想将一个类设计为可重用的类,用于彼此之间没有太大关联的类,将这个类来适配其他没有提供合适接口的类。
适配器模式是针对已有代码进行的改进,而不是在设计代码时需要考虑的方法。
2.主要优点
将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构。
增加了类的透明性和复用性,将具体的业务实现过程封装在适配者类中,对于客户端类而言是透 明的,而且提高了适配者类的复用性,同一个适配者类可以在多个不同的系统中复用。
3.主要缺点
会让系统看起来很复杂,不易维护
增加代码的阅读
- 适配器类: Adapter
public class Adapter implements Target { private Adaptee adaptee = new Adaptee(); public void request() { adaptee.adapterRequest(); } }