適配器模式定義:將一個(gè)類(lèi)的接口,轉(zhuǎn)化成客戶期望的另一個(gè)接口,適配器讓原本接口不兼容的類(lèi)可以合作無(wú)間。對(duì)象適配器類(lèi)圖如下:
角色說(shuō)明:
● Target,目標(biāo)接口
● Adapter,適配器
● Adaptee,被適配對(duì)象
● Client,客戶端
客戶使用適配器的過(guò)程如下:
● 客戶通過(guò)目標(biāo)接口調(diào)用適配器的方法對(duì)適配器發(fā)出請(qǐng)求。
● 適配器使用被適配者接口把請(qǐng)求轉(zhuǎn)換成被適配者的一個(gè)或多個(gè)調(diào)用接口。
● 客戶接收到調(diào)用的結(jié)果,但并未察覺(jué)這一切是適配器在起轉(zhuǎn)換作用。
適配器模式的優(yōu)點(diǎn):
● 將目標(biāo)類(lèi)和適配者類(lèi)解耦,通過(guò)引入一個(gè)適配器類(lèi)來(lái)重用現(xiàn)有的適配者類(lèi),無(wú)需修改原有結(jié)構(gòu)。
● 增加了類(lèi)的透明性和復(fù)用性,將具體的業(yè)務(wù)實(shí)現(xiàn)過(guò)程封裝在適配者類(lèi)中,對(duì)于客戶端類(lèi)而言是透明的,而且提高了適配者的復(fù)用性,同一適配者類(lèi)可以在多個(gè)不同的系統(tǒng)中復(fù)用。
● 靈活性和擴(kuò)展性都非常好,通過(guò)使用配置文件,可以很方便的更換適配器,也可以在不修改原有代碼的基礎(chǔ)上 增加新的適配器,完全復(fù)合開(kāi)閉原則。
適配器模式的缺點(diǎn):
● 一次最多只能適配一個(gè)適配者類(lèi),不能同時(shí)適配多個(gè)適配者。
● 目標(biāo)抽象類(lèi)只能為接口,不能為類(lèi),其使用有一定的局限性。
適配器模式的使用場(chǎng)景:
● 系統(tǒng)需要使用一些現(xiàn)有的類(lèi),而這些類(lèi)的接口不符合系統(tǒng)的需要,甚至沒(méi)有這些類(lèi)的源代碼
● 創(chuàng)建一個(gè)可以重復(fù)使用的類(lèi),用于和一些彼此之間沒(méi)有太大關(guān)聯(lián)的類(lèi),包括一些可能在將來(lái)引進(jìn)的類(lèi)一起工作
擴(kuò)展:
● 雙向適配器,兩個(gè)接口互相轉(zhuǎn)換,省略類(lèi)圖,說(shuō)明
● 類(lèi)適配器,Java不支持多重繼承,所以省略類(lèi)圖,說(shuō)明
案例1:假設(shè)已有一個(gè)軟件系統(tǒng),你希望它能和一個(gè)新的廠商類(lèi)庫(kù)搭配使用,但是這個(gè)新的廠商所設(shè)計(jì)出來(lái)的接口不同于舊廠商的接口。怎么實(shí)現(xiàn)好,如下:
解決辦法,我們不改目前代碼的情況下,加一個(gè)適配器(Adapter)類(lèi),適配器對(duì)用戶來(lái)說(shuō)透明的,如下:
案例2:有鴨子接口(鴨子能飛,呱呱叫),火雞接口(可以飛點(diǎn),姑姑叫),假設(shè)我們?nèi)兵喿訉?duì)象,用火雞來(lái)冒充,類(lèi)圖如下:
案例3:JDK中早起版本的Collection集合都實(shí)現(xiàn)了一個(gè)elements(),該方法返回一個(gè)包含集合里的每一個(gè)元素的枚舉,新版本的JDK里用Iterator來(lái)代替了,而且Iterator還提供了刪除元素的能力,假設(shè)有一個(gè)預(yù)留代碼,這個(gè)代碼爆出枚舉接口,但是我們想新代碼中使用迭代器,我們用適配器模式來(lái)解決,如下:
案例4: JDK里IO框架里的InputStreamReader,OutputStreamReader使用的是適配器模式,如下:
說(shuō)明:
● InputStream,OutputStream是被適配對(duì)象。
● Reader,Writer是目標(biāo)接口。
● StreamEncoder是中間類(lèi),byte類(lèi)型轉(zhuǎn)字符時(shí)需要編碼轉(zhuǎn)換的,貴類(lèi)的作用就是這個(gè)。
● InputStreamReader,OutputStreamReader是適配器類(lèi)。
設(shè)計(jì)原則:“最少知識(shí)”原則:只和你的密友談話。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
本文標(biāo)題:“HeadFirst設(shè)計(jì)模式“:適配器模式-創(chuàng)新互聯(lián)
URL地址:http://muchs.cn/article40/ideeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、定制網(wǎng)站、ChatGPT、定制開(kāi)發(fā)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容