[轉(zhuǎn)]23種設(shè)計(jì)模式(5)-適配器模式

1 定義:

將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。

2 角色:

  • 目標(biāo)(Target)角色: 這就是所期待得到的接口,也就是這類的接口是符合我們要求的。
  • 源(Adapee)角色: 我們要使用的接口,但是這個(gè)接口不符合我們的要求,也就是現(xiàn)在需要適配的接口。
  • 適配器(Adaper)角色: 適配器類是適配器模式的核心。適配器把源接口轉(zhuǎn)換成目標(biāo)接口。顯然,這一角色不可以是接口,而必須是具體類。

3 分類:

3.1 類適配器模式

class Adaptee {         
    publicvoid specificRequest() {
         System.out.println("特殊請(qǐng)求,這個(gè)是源角色");
    }
}
/*這個(gè)是目標(biāo)角色,所期待的接口*/

interface Target {         
    publicvoid request();
}

現(xiàn)在想要實(shí)現(xiàn)這個(gè)Target接口,但是不想重構(gòu),想要用上已有的Adaptee類,這時(shí)可以定義一個(gè)適配器類,繼承想要使用的類,并且實(shí)現(xiàn)期待的接口。

class Adapter extends Adaptee implements Target{
         publicvoid request() {
                   super.specificRequest();
         }
}

這樣,使用適配器類和實(shí)現(xiàn)目標(biāo)接口就完成了計(jì)劃,測試:

public class Test{
         publicstatic void main(String[] args) {
                   //使用特殊功能類,即適配類
                   Target adapter = new Adapter();
                   adapter.request();
         }
}

3.2 對(duì)象適配器模式

適配器類關(guān)聯(lián)已有的Adaptee類,并且實(shí)現(xiàn)標(biāo)準(zhǔn)接口,這樣做的好處是不再需要繼承。

class Adapter implements Target{
         private Adaptee adaptee;

         public Adapter (Adaptee adaptee) {
                   this.adaptee= adaptee;
         }

         public void request() {
                   this.adaptee.specificRequest();
         }
}

我們可以想到,此時(shí)輸出結(jié)果和類適配器模式是相同的,測試:

public class Test{
         publicstatic void main(String[] args) {
                   Targetadapter = new Adapter(new Adaptee());
                   adapter.request();
         }
}

區(qū)別:
對(duì)象的適配器模式不是使用繼承關(guān)系連接到Adaptee類,而是使用委派關(guān)系連接到Adaptee類。

4 優(yōu)點(diǎn):

  • 復(fù)用性
    系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)的需要。那么通過適配器模式就可以讓這些功能得到更好的復(fù)用。

  • 擴(kuò)展性
    在實(shí)現(xiàn)適配器功能的時(shí)候,可以自由調(diào)用自己開發(fā)的功能,從而自然地?cái)U(kuò)展系統(tǒng)的功能。

5 缺點(diǎn):

過多的使用適配器,會(huì)讓系統(tǒng)非常零亂,不易整體進(jìn)行把握。比如,明明看到調(diào)用的是A接口,其實(shí)內(nèi)部被適配成了B接口的實(shí)現(xiàn)。所以適配器模式不適合在詳細(xì)設(shè)計(jì)階段使用它,它是一種補(bǔ)償模式,專用來在系統(tǒng)后期擴(kuò)展、修改時(shí)所用。

6 適用場景:

1、已經(jīng)存在的類的接口不符合我們的需求;

2、創(chuàng)建一個(gè)可以復(fù)用的類,使得該類可以與其他不相關(guān)的類或不可預(yù)見的類協(xié)同工作;

3、使用一些已經(jīng)存在的子類而不需要對(duì)其進(jìn)行子類化來匹配接口。

4、舊的系統(tǒng)開發(fā)的類已經(jīng)實(shí)現(xiàn)了一些功能,但是客戶端卻只能以另外接口的形式訪問,但我們不希望手動(dòng)更改原有類的時(shí)候。

7 小結(jié):

適配器模式不適合在詳細(xì)設(shè)計(jì)階段使用它,它是一種補(bǔ)償模式,專用來在系統(tǒng)后期擴(kuò)展、修改時(shí)所用,適配器模式更像是一種補(bǔ)救措施。

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

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

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