0x0 适配器模式介绍
要解决的问题
1、当一个新系统要是用老的系统的功能,而又发现接口不能融合时
2、系统需要使用现有的类,而此类的接口不符合系统的需要时。
组成
Target:客户期望的接口或者类
Adaptee:即将要适配的类
Adapter:适配器
好处
1、已经存在的类的接口不符合我们的需求;
2、创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作;
3、在不对每一个都进行子类化以匹配它们的接口的情况下,使用一些已经存在的子类。
缺点
过多的使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是A接口,其实内部被适配成了B接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。
0x1 类图
适配器模式分2种,一种类模式,一种对象模式
0x2 代码
Target
<pre>
public interface Target {
public void request();
}
</pre>
Adaptee
<pre>
public class Adaptee {
public void specialRequest() {
System.out.println("special rqquest !");
}
}
</pre>
<pre>
//public class Adapter extends Adaptee implements Target { //这个是类模式
public class Adapter implements Target {//这个是对象模式的适配
Adaptee adaptee;
public Adapter( Adaptee adaptee ) {
this.adaptee = adaptee;
}
@Override
public void request() {
//适配
this.adaptee.specialRequest();
}
}
</pre>
<pre>
public class Main {
public static void main(String[] args) {
System.out.println("Hello World!");
Target target = new Adapter(new Adaptee());
target.request();
}
}
</pre>