1. 介绍
1.1 定义
适配器模式,即定义一个包装类,用于包装不兼容接口的对象
包装类 = 适配器Adapter;
被包装对象 = 适配者Adaptee = 被适配的类
1.2 主要作用
把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。
适配器模式的形式分为:类的适配器模式和对象的适配器模式
1.3 解决的问题
原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
2. 模式原理
2.1 类的适配器模式
类的适配器模式是把适配的类的API转换成为目标类的API。
2.1.1 UML类图 & 组成
在上图中可以看出:
冲突:Target期待调用Request方法,而Adaptee并没有(这就是所谓的不兼容了)。
解决方案:为使Target能够使用Adaptee类里的SpecificRequest方法,故提供一个中间环节Adapter类**(继承Adaptee & 实现Target接口)**,把Adaptee的API与Target的API衔接起来(适配)。
Adapter与Adaptee是继承关系,这决定了这个适配器模式是类的
2.1.2 使用步骤(代码解析)
步骤1: 创建Target接口;
步骤2: 创建源类(Adaptee) ;
步骤3: 创建适配器类(Adapter)
步骤4:定义具体使用目标类,并通过Adapter类调用所需要的方法从而实现目标
public interface Target {
//这是源类Adapteee没有的方法
public void Request();
}
public class Adaptee {
public void SpecificRequest(){
}
}
//适配器Adapter继承自Adaptee,同时又实现了目标(Target)接口。
public class Adapter extends Adaptee implements Target {
//目标接口要求调用Request()这个方法名,但源类Adaptee没有方法Request()
//因此适配器补充上这个方法名
//但实际上Request()只是调用源类Adaptee的SpecificRequest()方法的内容
//所以适配器只是将SpecificRequest()方法作了一层封装,封装成Target可以调用的Request()而已
@Override
public void Request() {
this.SpecificRequest();
}
}
public class AdapterPattern {
public static void main(String[] args){
Target mAdapter = new Adapter();
mAdapter.Request();
}
}