設(shè)計(jì)模式-之適配器模式

在介紹適配器模式之前,我們先了解一下設(shè)計(jì)模式


?????? 設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用、多數(shù)人知曉的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。目的是為了可重用性代碼,讓代碼更容易被他人理解,保證代碼可靠性。

??

適配器(Adapter)模式


???????適配器模式使我們可以重用一個(gè)現(xiàn)有的類,以滿足客戶端的需要。當(dāng)客戶端通過接口表達(dá)其需求時(shí),通??梢詣?chuàng)建一個(gè)實(shí)現(xiàn)了該接口的新類,同時(shí)使該類繼承自現(xiàn)有類。這種方式即類的適配器,它能夠?qū)⒖蛻舳说恼{(diào)用轉(zhuǎn)換為對(duì)現(xiàn)有類方法的調(diào)用。


主要分為三類:類適配器模式、對(duì)象的適配器模式、接口的適配器模式。


1.類適配器模式


小農(nóng)解釋

?????? 適配器模式使我們可以重用一個(gè)現(xiàn)有的類,以滿足客戶端的需要。當(dāng)客戶端通過接口表達(dá)其需求時(shí),通??梢詣?chuàng)建一個(gè)實(shí)現(xiàn)了該接口的新類,同時(shí)使該類繼承自現(xiàn)有類。這種方式即類的適配器,它能夠?qū)⒖蛻舳说恼{(diào)用轉(zhuǎn)換為對(duì)現(xiàn)有類方法的調(diào)用。


首先看一個(gè)簡單的例子,通過這個(gè)例子來理解類適配器模式。

/* 接口Ps */

public?interface?Ps {

????void?isPs();

}

/* 接口Usb */

public?interface?Usb {

????void?isUsb();

}

/* 實(shí)現(xiàn)Usb接口 */

public?class?Usber implements?Usb {

????@Override

????public?void?isUsb() {

????????System.out.println("Usb接口");

????}

}

/* 適配器類繼承實(shí)現(xiàn)Usb接口,實(shí)現(xiàn)Ps接口 */

public?class?Adapter extends?Usber implements?Ps {

??? @Override

????public?void?isPs() {

?????????System.out.println("適配器類--start--");

?????????isUsb();

?????????System.out.println("適配器類--end--");

????}

}

/* 測(cè)試類 */

public?class?Test {

????public?static?void?main(String[] args) {

????????Ps p?= new?Adapter();

????????p.isPs();

??? }

}

輸出結(jié)果:


小農(nóng)解釋

??手里有ps插頭的設(shè)備,但是主機(jī)上只有Usb插頭的插口。

? ? ? 那怎么辦呢?這時(shí)就需要一個(gè)轉(zhuǎn)換器,將ps插頭轉(zhuǎn)換成Usb插頭就可以使用了。

????? 接口Ps:描述ps接口格式。

? ? ? 接口Usb:描述Usb接口格式。

? ? ? 類Usber:是接口Usb的實(shí)現(xiàn)類,是具體的Usb接口格式。

????? Adapter:用于ps接口格式轉(zhuǎn)換成為Usb接口格式。


2.對(duì)象適配器模式


小農(nóng)解釋

??????對(duì)象適配器和類適配器其實(shí)算是同一種思想,只不過實(shí)現(xiàn)方式不同。
????? 根據(jù)合成復(fù)用原則,組合大于繼承,所以它解決了類適配器必須繼承Usber 的局限性問題,同樣的它使用成本更低,更靈活。


/* 適配器類*/

public?class?Adapter ?implements?Ps {

???????? private?Usb usb;

???????? public?Adapter(Usb usb){

????????????????this.usb?= usb;

??????? }

??????? @Override

??????? public?void?isPs() {

?????????????????System.out.println("適配器類--start--");

?????????????????isUsb();

?????????????????System.out.println("適配器類--end--");

??????? }

}

/* 測(cè)試類*/

public?class?Test {

????public?static?void?main(String[] args) {

?? ????Ps p?= new?Adapter(new?Usber());

?? ????p.isPs();

????}

}

輸出結(jié)果:



3.接口適配器模式


小農(nóng)解釋

??????當(dāng)存在這樣一個(gè)接口,其中定義了N多的方法,而我們現(xiàn)在卻只想使用其中的一個(gè)到幾個(gè)方法,如果我們直接實(shí)現(xiàn)接口,那么我們要對(duì)所有的方法進(jìn)行實(shí)現(xiàn),哪怕我們僅僅是對(duì)不需要的方法進(jìn)行置空(只寫一對(duì)大括號(hào),不做具體方法實(shí)現(xiàn))也會(huì)導(dǎo)致這個(gè)類變得臃腫,調(diào)用也不方便,這時(shí)我們可以使用一個(gè)抽象類作為中間件,即適配器,用這個(gè)抽象類實(shí)現(xiàn)接口,而在抽象類中所有的方法都進(jìn)行置空,那么我們?cè)趧?chuàng)建抽象類的繼承類,而且重寫我們需要使用的那幾個(gè)方法即可。


/* 接口A*/

public?interface?A {

????????void?methodA();

????????void?methodB();

????????void?methodC();

????????void?methodD();

????????void?methodE();

????????void?methodF();

}

/* 適配器類 */

public?abstract?class?Adapter implements?A {

????????public?void?methodA() {}

????????public?void?methodB() {}

????????public?void?methodC() {}

????????public?void?methodD() {}

????????public?void?methodE() {}

????????public?void?methodF() {}

}

/* 實(shí)現(xiàn)類 */

public?class?Aimplement extends?Adapter {

??????public?void?methodA(){

????????System.out.println("實(shí)現(xiàn)A方法被調(diào)用");

??????}

??????public?void?methodB(){

????????System.out.println("實(shí)現(xiàn)b方法被調(diào)用");

??????}

}

/*測(cè)試類*/

public?class?Test {

????public?static?void?main(String[] args) {

????????A a = new Aimplement();

????????a.methodA();

????????a.methodB();

????}

}


所謂“實(shí)踐出真知”,只有理論結(jié)合實(shí)踐,才能在面臨挑戰(zhàn)時(shí),細(xì)心十足地運(yùn)用設(shè)計(jì)模式。


?著作權(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)容

  • 設(shè)計(jì)模式之適配器模式 1.綜述 在計(jì)算機(jī)編程中,適配器模式(有時(shí)候也稱包裝樣式或者包裝)將一個(gè)類的接口適配成用戶所...
    Airprince閱讀 610評(píng)論 0 5
  • 定義 適配器就是一種適配中間件,它存在于不匹配的二者之間,用于連接二者,將不匹配變得匹配,簡單點(diǎn)理解就是平常所見的...
    Cat9527閱讀 633評(píng)論 0 0
  • 1. 定義 將一個(gè)接口轉(zhuǎn)換成客戶希望的另一個(gè)接口,使接口不兼容的類可以一起工作,其別名為包裝器。適配器模式既可以...
    落英墜露閱讀 343評(píng)論 0 0
  • 源在給我梳理頭發(fā)時(shí)說 人的氣質(zhì)與她年輕時(shí)讀的書有關(guān)尤其什么類型的書 我笑了這不是在夸我嗎 真的小時(shí)乃至青年愛讀小說...
    伊晨xl閱讀 196評(píng)論 0 0
  • 今天我主要講的是纖維肌痛綜合征,但是開始之前,我先講一下田阿姨的事。阿姨68歲患有焦慮癥3年,嘗試過藥物,營養(yǎng)補(bǔ)品...
    fc3bf56c0493閱讀 4,254評(píng)論 0 1

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