作用
将一个类的接口转换成期望的另一个接口
使原本不兼容的类可以一起工作
使原有对象和新接口匹配
不是软件设计阶段考虑的设计模式
更多像是开发过程中的代码优化
demo设计
被适配的类
假设有一个类已经写好了,但是与新写的接口不兼容
public class Adaptee {
public void adapteeRequest() {
System.out.println("被适配的方法");
}
}
新接口
假设新的代码中要基于此接口实现业务逻辑
public interface Target {
void request();
}
实现类
实现Target接口,这是一个很常见的用法
public class ConcreateTarget implements Target {
@Override
public void request() {
System.out.println("concreateTarget目标方法");
}
}
使原有类适配新接口
Adaptee和Target接口并不兼容,所以在此需要写一个类用于适配Target接口
使用继承的方式
继承原有类,并实现新接口,在接口的实现方法中调用父类方法,完成适配
public class Adapter extends Adaptee implements Target {
@Override
public void request() {
super.adapteeRequest();
}
}
使用组合的方式
不继承原有类,只实现新接口,需要在使用原有类类型的成员变量
public class Adapter implements Target {
private Adaptee adaptee = new Adaptee();
@Override
public void request() {
adaptee.adapteeRequest();
}
}
更推荐组合的方式实现适配器模式
小结
使得原有的类通过适配器来兼容新的接口,而且不需要动原有的代码
每有一个需要被适配的类,都需要写一个用于适配的类