适配器模式(Adapter)
应用场景
以前开发的系统存在满足新系统功能需求的类,但其接口和新系统的接口不一致
使用第三方提供的组件,但组件接口定义和自己要求的接口定义不同
关键:适配器类继承适配者类或者拥有适配者类对象的引用
定义:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作
目标接口(Target):当前系统期待的接口,可以是抽象类或接口
适配者(Adaptee)
适配器(Adapter)
类适配器模式
//适配者类
class Adaptee {
public void specificRequest() {
System.out.println("适配者中业务代码");
}
}
//目标接口
interface Target {
public void request();
}
//适配器类
class Adapter extends Adaptee implements Target {
public void request() {
specificRequest();
}
}
对象适配器模式
//适配者类
class Adaptee {
public void specificRequest() {
System.out.println("适配者中业务代码");
}
}
//目标接口
interface Target {
public void request();
}
//适配器类
class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
public void request() {
adaptee.specificRequest();
}
}
模式扩展:双适配器模式
//适配者接口
interface Adaptee {
public void specificRequest();
}
//适配者接口实现类
class AdapteeImpl implements Adaptee {
public void specificRequest() {
System.out.println("适配者中业务代码");
}
}
//目标接口
interface Target {
public void request();
}
//目标接口实现类
class TargetImpl implements Target {
public void request() {
System.out.println("目标代码被调用");
}
}
//双向适配器
class TwoWayAdapter implements Target,Adaptee {
private Target target;
private Adaptee adaptee;
public TwoWayAdapter(Target target) {
this.target = target;
}
public TwoWayAdapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
public void request() {
adaptee.specificRequest();
}
public vodi specificRequest() {
target.request()
}
}
浙公网安备 33010602011771号