- 定义
将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
- 优点
1、可以让任何两个没有关联的类一起运行。 2、提高了类的复用。 3、增加了类的透明度。 4、灵活性好。
- 缺点
1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。 2.由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。
类图

- 模式的扩展
适配器模式(Adapter)可扩展为双向适配器模式,双向适配器类既可以把适配者接口转换成目标接口,也可以把目标接口转换成适配者接口,其结构图如图 4 所示。

- netty 中的设计模式
public class ChannelInboundHandlerAdapter extends ChannelHandlerAdapter implements ChannelInboundHandler
ChannelInboundHandlerAdapter 适配器 ChannelHandlerAdapter 适配者 ChannelInboundHandler目标接口
/***
* 适配者(Adaptee)类:
*/
public class Adaptee {
public void b(){
System.out.println("打印适配者");
}
}
/***
* 目标接口
*/
public interface Target {
public void a();
}
/***
* 类适配器模式
* 适配器
* 设计符合目标接口的实现
* 继承的是适配者 实现的是目标接口
*/
public class Adapter extends Adaptee implements Target {
@Override
public void a() {
super.b();
}
}
/***
* 对象适配器模式
* 适配器
* 设计符合目标接口的实现
* 实现的是目标接口
*/
public class Adapter_2 implements Target {
private Adaptee adaptee;
public Adapter_2(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void a() {
adaptee.b();
}
}
public class Test {
public static void main(String[] args) {
Target target = new Adapter();
target.a();
}
}
网友评论