0x0 適配器模式介紹
要解決的問題
1告组、當(dāng)一個(gè)新系統(tǒng)要是用老的系統(tǒng)的功能则涯,而又發(fā)現(xiàn)接口不能融合時(shí)
2筒溃、系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)的需要時(shí)映之。
組成
Target:客戶期望的接口或者類
Adaptee:即將要適配的類
Adapter:適配器
好處
1拦焚、已經(jīng)存在的類的接口不符合我們的需求;
2杠输、創(chuàng)建一個(gè)可以復(fù)用的類耕漱,使得該類可以與其他不相關(guān)的類或不可預(yù)見的類(即那些接口可能不一定兼容的類)協(xié)同工作;
3抬伺、在不對(duì)每一個(gè)都進(jìn)行子類化以匹配它們的接口的情況下,使用一些已經(jīng)存在的子類灾梦。
缺點(diǎn)
過多的使用適配器峡钓,會(huì)讓系統(tǒng)非常零亂,不易整體進(jìn)行把握若河。比如能岩,明明看到調(diào)用的是A接口,其實(shí)內(nèi)部被適配成了B接口的實(shí)現(xiàn)萧福,一個(gè)系統(tǒng)如果太多出現(xiàn)這種情況拉鹃,無異于一場(chǎng)災(zāi)難。因此如果不是很有必要鲫忍,可以不使用適配器膏燕,而是直接對(duì)系統(tǒng)進(jìn)行重構(gòu)。
0x1 類圖
適配器模式分2種悟民,一種類模式坝辫,一種對(duì)象模式
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 { //這個(gè)是類模式
public class Adapter implements Target {//這個(gè)是對(duì)象模式的適配
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>