本文參考自: 《JAVA與模式》之適配器模式
1.作用
將一個類的接口轉(zhuǎn)換成客戶端所需要的另一個接口,從而使原本接口不匹配的兩個類可以一起工作拉庵。
2.分類
- 類適配器
- 對象適配器
- 缺省適配模式
3.類適配器
涉及的三個類
- Adaptee: 需要被適配的類
- Adapter: 用來適配Adaptee的適配器
- Target: 目標(biāo)類
實現(xiàn)方式
使用Adapter繼承Adaptee偎漫,繼承Adaptee中所有的方法世吨,并增加Target所需要的方法祖能。從而將Adaptee和Target進(jìn)行適配赁项。
具體代碼
Adaptee
public class Adaptee {
public void sampleOperation1() {
}
}
Adapter
public class Adapter extends Adaptee{
public void sampleOperation2() {
}
}
Target
public class Target {
public Adapter adapter;
public Target(Adapter adapter) {
this.adapter = adapter;
}
public void sampleOperation1() {
adapter.sampleOperation1();
}
public void sampleOperation2() {
adapter.sampleOperation2();
}
}
4.對象適配器
涉及的三個類
- Adaptee: 需要被適配的類
- Adapter: 用來適配Adaptee的適配器
- Target: 目標(biāo)類
實現(xiàn)方式
與類適配器存在區(qū)別的地方時澳迫,在對象適配器中局齿,Adapter采用組合的方式對Adaptee進(jìn)行拓展,而不是采用繼承的方法橄登。具體看如下代碼抓歼。
具體代碼
Adaptee
public class Adaptee {
public void sampleOperation1() {
}
}
Adapter
public class Adapter{
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
public void sampleOperation1() {
adaptee.sampleOperation1();
}
public void sampleOperation2() {
}
}
Target
public class Target {
private Adapter adapter;
public Target(Adapter adapter) {
this.adapter = adapter;
}
public void sampleOperation1() {
adapter.sampleOperation1();
}
public void sampleOperation2() {
adapter.sampleOperation2();
}
}
5. 類適配器與對象適配器優(yōu)缺點比較
- 類適配器繼承的方式對Adaptee進(jìn)行適配,只能對一個類進(jìn)行適配
- 對象適配器采用組合的方式進(jìn)行適配示绊,這樣可以同時適配多個源锭部,只要將需要適配的對象傳進(jìn)來就行了
- 類適配器可以更容易的對Adaptee中的方式進(jìn)行更改。
- 對象適配器不能直接更改Adaptee中的方法面褐。想要修改的話拌禾,只能新建一個子類繼承Adaptee,然后再子類中修改Adaptee中的方法展哭,再對子類進(jìn)行適配
5.缺省適配模式
作用
這是一種特殊卻常用的適配器模式湃窍。
產(chǎn)生的原因是:對于一個接口,里面有一些方法是主要且常用的匪傍,很多子類都需要實現(xiàn)這類方法您市,但是有一些方法是不常用的,子類大部分時間不需要實現(xiàn)這些方法役衡。如果子類直接實現(xiàn)接口茵休,那么所有的方法都需要實現(xiàn),不常用的方法就需要寫一個空實現(xiàn)手蝎,這樣就會造成很多冗余的代碼榕莺。
解決辦法是:用一個抽象類實現(xiàn)接口,覆蓋里面不常用的方法棵介,子類直接繼承抽象類钉鸯,這樣子類就不需要實現(xiàn)所有的方法,只要實現(xiàn)自己需要的核心方法即可邮辽。
6. 適配器模式的優(yōu)缺點
優(yōu)點
1. 更好的復(fù)用性
新對象可以通過適配器模式直接使用原有的類唠雕,更好的對現(xiàn)有代碼進(jìn)行復(fù)用贸营。
2. 更好的拓展性
通過適配器模式,可以使得對某個類的后續(xù)拓展更加簡單和方便岩睁。
缺點
過多的使用適配器钞脂,會讓系統(tǒng)非常零亂,不易整體進(jìn)行把握捕儒。比如芳肌,明明看到調(diào)用的是A接口,其實內(nèi)部被適配成了B接口的實現(xiàn)肋层,一個系統(tǒng)如果太多出現(xiàn)這種情況亿笤,無異于一場災(zāi)難。因此如果不是很有必要栋猖,可以不使用適配器净薛,而是直接對系統(tǒng)進(jìn)行重構(gòu)。