什么是适配器模式
- 将一个类的接口,转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间
类关系描述
RealAction类是已经上线的类,客户用着它的realCall()方法实现了相应的需求,但是现在客户要求接口发生变化,Client那边现在需要实现Subject接口的类,但是需要的功能没有发生变化,意味着还是需要realCall()这个方法,为了不改变已经上线的RealAction类,我们可以让实现了Subject接口的类Adapter内部持有一个RealAction的引用,给用户Adapter,背后使用RealAction类的realCall方法
代码描述
Client.java
public class Client {
Subject subject;
public Client(Subject subject) {
this.subject = subject;
}
//用户调用的方法
public void doSomething() {
subject.call();
}
}
Subject.java
public interface Subject {
void call();
}
Adapter.java
public class Adapter implements Subject{
RealAction realAction;
public Adapter(RealAction realAction) {
this.realAction = realAction;
}
@Override
public void call() {
realAction.realCall();
}
}
RealAction.java
public class RealAction {
public void realCall() {
System.out.println("call RealAction");
}
}
- 我们来看一下测试main方法
public class Main {
public static void main(String[] args) {
//创建一个已经上线的类(不能随意修改类中的细节)
RealAction realAction = new RealAction();
//创建一个适配器,把已经上线的类传递进去
Adapter adapter = new Adapter(realAction);
//创建客户类,把adapter传递进去
Client client = new Client(adapter);
//客户调用方法实现需求
client.doSomething();
}
}
当客户改变接口时,我们不需要修改上线的类,只需要从中间加一个适配器即可
适配器模式的使用场景
- 你有动机修改一个已经上线的接口时,使用适配器模式,将会大大减低你工作的复杂度
适配器模式的思考
- 适配器模式不是在设计阶段该考虑的一种模式,它属于解决多变需求或者前期缺陷设计的一种解决方案,它往往用在开发过程中,而不是最开始的设计中,注意,开发程序不应该陷入过度设计的泥潭