適配器模式

本文參考自: 《JAVA與模式》之適配器模式

1.作用

將一個類的接口轉(zhuǎn)換成客戶端所需要的另一個接口,從而使原本接口不匹配的兩個類可以一起工作。

2.分類
  • 類適配器
  • 對象適配器
  • 缺省適配模式
3.類適配器

涉及的三個類

  • Adaptee: 需要被適配的類
  • Adapter: 用來適配Adaptee的適配器
  • Target: 目標(biāo)類

實現(xiàn)方式
使用Adapter繼承Adaptee,繼承Adaptee中所有的方法,并增加Target所需要的方法。從而將Adaptee和Target進行適配。

具體代碼
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進行拓展,而不是采用繼承的方法。具體看如下代碼。

具體代碼
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進行適配,只能對一個類進行適配
    • 對象適配器采用組合的方式進行適配,這樣可以同時適配多個源,只要將需要適配的對象傳進來就行了
    • 類適配器可以更容易的對Adaptee中的方式進行更改。
    • 對象適配器不能直接更改Adaptee中的方法。想要修改的話,只能新建一個子類繼承Adaptee,然后再子類中修改Adaptee中的方法,再對子類進行適配
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)有代碼進行復(fù)用。
2. 更好的拓展性
通過適配器模式,可以使得對某個類的后續(xù)拓展更加簡單和方便。

缺點

過多的使用適配器,會讓系統(tǒng)非常零亂,不易整體進行把握。比如,明明看到調(diào)用的是A接口,其實內(nèi)部被適配成了B接口的實現(xiàn),一個系統(tǒng)如果太多出現(xiàn)這種情況,無異于一場災(zāi)難。因此如果不是很有必要,可以不使用適配器,而是直接對系統(tǒng)進行重構(gòu)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容