适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适用场景:
1、已经存在的类的接口不符合我们的需求;
2、创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作;
3、在不对每一个都进行子类化以匹配它们的接口的情况下,使用一些已经存在的子类。
UML图:
适配器的意义在于,就是为了将已存在的东西(接口)转换成适合我们的需要、能被我们所利用。非常形象的比喻:就像生活中的手机充电器,电脑的电源适配器一样。适配器就行Client和Target的中间件。
代码实现:
普通接口
<span style="font-size:12px;">public class ConcreteTarget implements Target{
@Override
public void request() {
System.out.println("普通类 ...");
}
}
//目标接口
interface Target {
public void request();
}</span><span style="font-size: 14px;">
</span>
特殊接口:
<span style="font-size:12px;">public class Adapter {
public void specificAdapter() {
System.out.println("适配器模式特殊接口...");
}
}</span>
所以我们要实现普通和特殊的功能,
class Adapter extends Adaptee implements Target{
public void request() {
super.specificRequest();
}
}
测试
public class Client {
public static void main(String[] args) {
// 使用普通功能类
Target concreteTarget = new ConcreteTarget();
concreteTarget.request();
// 使用特殊功能类,即适配类
Target adapter = new Adapter();
adapter.request();
}
}
小结
NOTE:之前提到的都是 对象适配器,另外还有一种叫做 类适配器,不过类适配器需要多重继承去实现(Adapter需要继承Target和Adaptee),而不是组合的方式去实现。
适配器是:将一个接口转成另一个接口 装饰者是:不改变接口,但加入新的责任 外观模式是:让接口更简单