摘要:適配器模式將一個(gè)類的接口適配成用戶所期待的。概念定義表明,適配器模式就是當(dāng)前我們的接口是不符合我們使用要求的,我們通過(guò)適配器模式將其轉(zhuǎn)化,即為將一個(gè)接口轉(zhuǎn)化為另一個(gè)接口,然后再使用。
目錄
適配器模式
為什么使用適配器模式?
適配器模式應(yīng)用實(shí)例
適配器模式說(shuō)道適配器模式,大多數(shù)人肯定不會(huì)陌生,提及其英文名稱,Adapter,搞過(guò)Android的一定會(huì)想到在對(duì)ListView進(jìn)行填充的時(shí)候,我們所用到的setAdapter(),通過(guò)一個(gè)適配器來(lái)使得listview具有不同的形式,姿態(tài)。
適配器模式將一個(gè)類的接口適配成用戶所期待的。一個(gè)適配允許通常因?yàn)榻涌诓患嫒荻荒茉谝黄鸸ぷ鞯念惞ぷ髟谝黄?,做法是將類自己的接口包裹在一個(gè)已存在的類中。
概念定義表明,適配器模式就是當(dāng)前我們的接口是不符合我們使用要求的,我們通過(guò)適配器模式將其轉(zhuǎn)化,即為將一個(gè)接口轉(zhuǎn)化為另一個(gè)接口,然后再使用。就好比,我們?cè)诮o手機(jī)充電的時(shí)候,我們直接將usb線插進(jìn)插座里,肯定是不可以的,我們需要將usb線先插入到一個(gè)適配器里,然后適配器插到插座上,我們才可以正常使用。這個(gè)概念理解起來(lái)還是相對(duì)比較簡(jiǎn)單的。
為什么使用適配器模式?適配器是用來(lái)將將現(xiàn)有不適配接口轉(zhuǎn)化為適配的接口,供給當(dāng)下使用。借助之前的一個(gè)機(jī)器生產(chǎn)問(wèn)題來(lái)舉例,我們?cè)跈C(jī)器生產(chǎn)后,進(jìn)行銷售的時(shí)候要進(jìn)行以此包裝,為了降低商店和具體機(jī)器的耦合,我們通過(guò)一個(gè)工廠模式來(lái)解決這個(gè)問(wèn)題,實(shí)現(xiàn)一個(gè)依賴倒置,現(xiàn)在又有一個(gè)問(wèn)題,出現(xiàn)了,我們的商店現(xiàn)在要出售一種在本商店一直沒(méi)有出售過(guò)的機(jī)器,該機(jī)器的由于之前一直是在其它的商店銷售,雖然其生產(chǎn)流程類似,但是其銷售前的包裝方式是不同的,現(xiàn)在轉(zhuǎn)到我們的商店來(lái),我們就有點(diǎn)犯愁了,我們不可能為了這一件產(chǎn)品而重新寫(xiě)代碼之前的代碼,但是該件商品還是要出售,我們可能想到打開(kāi)該件商品去修改,但是該商品還在另一家店出售,有沒(méi)有不用修改代碼的方式呢?適配器就是來(lái)解決這個(gè)問(wèn)題的,適配器可以出來(lái)大顯身手了。
之前我們的代碼是這樣的。
public class Store{ Store(){ MachineFactory factory = new MachineFactory(); } public void order(String type){ Machine machine= factory.create(type); machine.firstPack(); machine.secondPack(); machine.thirdPack(); machine.fourthPack(); } }
我們商店引入的新機(jī)器是這樣的
public class InflatableDoll extends Machine{ public void onePack(){ System.out.prinltn("Add first pack to protect"); } public void twoPack(){ System.out.prinltn("Add second pack to protect"); } public void threePack(){ System.out.prinltn("Add third pack to protect"); } public void fourPack(){ System.out.prinltn("Add fourth pack to protect"); } }
適配器大顯身手
public class InflatableDollAdapter extends Machine{ InflatableDoll doll; MachineAdapter(InflatableDoll doll){ this.doll = doll; } public void firstPack(){ doll.onePack(); } public void secondPack(){ doll.twoPack(); } public void thirdPack(){ doll.threePack(); } public void fourthPack(){ doll.fourPack(); } }
商店中的order方法可以這樣來(lái)寫(xiě)
public void order(String type){ Machine machine; if(type=="InflatableDoll") machine = InflatabelDollAdapter(factory.create(type)); else machine=factory.create(type); machine.firstPack(); machine.secondPack(); machine.thirdPack(); machine.fourthPack(); }
不適配的問(wèn)題解決了,適配器類將原有的類包起來(lái),通過(guò)委托來(lái)實(shí)現(xiàn)功能的適配。這個(gè)例子不是很好,因這樣如果后來(lái)需要適配的類持續(xù)增多,這個(gè)將變得很臃腫,這里主要借助這個(gè)例子方便大家理解這個(gè)適配器的這個(gè)實(shí)現(xiàn)過(guò)程。
適配器應(yīng)用實(shí)例上面提到Android中的listview,因?yàn)椴煌腖istview所要呈現(xiàn)的視圖也是不同的,為了應(yīng)對(duì)這種變化,就通過(guò)一個(gè)適配器來(lái)將這種變化和我們的ListView實(shí)現(xiàn)一個(gè)隔離和適配。我們可以通過(guò)一個(gè)繼承自BaseAdapter類來(lái)實(shí)現(xiàn)自己的適配器,來(lái)將我們對(duì)ListView中的每一個(gè)item視圖的配置。
下篇更新迭代器模式
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/64641.html
摘要:我們今天也來(lái)做一個(gè)萬(wàn)能遙控器設(shè)計(jì)模式適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。今天要介紹的仍然是創(chuàng)建型設(shè)計(jì)模式的一種建造者模式。設(shè)計(jì)模式的理論知識(shí)固然重要,但 計(jì)算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計(jì)模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對(duì)容器接口對(duì)象進(jìn)行操作,第二類是返回一個(gè)容器接口對(duì)象,上節(jié)我們介紹了...
摘要:我們今天也來(lái)做一個(gè)萬(wàn)能遙控器設(shè)計(jì)模式適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。今天要介紹的仍然是創(chuàng)建型設(shè)計(jì)模式的一種建造者模式。設(shè)計(jì)模式的理論知識(shí)固然重要,但 計(jì)算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計(jì)模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對(duì)容器接口對(duì)象進(jìn)行操作,第二類是返回一個(gè)容器接口對(duì)象,上節(jié)我們介紹了...
摘要:工作原因,最近一年斷斷續(xù)續(xù)寫(xiě)了一點(diǎn)前端代碼,收集整理了一些資料,和大家共享。 工作原因,最近一年斷斷續(xù)續(xù)寫(xiě)了一點(diǎn)前端代碼,收集整理了一些資料,和大家共享。 Github版本:Front-End Resource Collection 前端相關(guān)資源匯總 學(xué)習(xí)指導(dǎo) 精華文章 Web前端的路該怎么走?:文章超長(zhǎng),但是干貨超級(jí)多,值得反復(fù)精讀! 聽(tīng)說(shuō)2017你想寫(xiě)前端?:適合于已經(jīng)度過(guò)了小白階...
摘要:工作原因,最近一年斷斷續(xù)續(xù)寫(xiě)了一點(diǎn)前端代碼,收集整理了一些資料,和大家共享。 工作原因,最近一年斷斷續(xù)續(xù)寫(xiě)了一點(diǎn)前端代碼,收集整理了一些資料,和大家共享。 Github版本:Front-End Resource Collection 前端相關(guān)資源匯總 學(xué)習(xí)指導(dǎo) 精華文章 Web前端的路該怎么走?:文章超長(zhǎng),但是干貨超級(jí)多,值得反復(fù)精讀! 聽(tīng)說(shuō)2017你想寫(xiě)前端?:適合于已經(jīng)度過(guò)了小白階...
閱讀 2899·2021-10-26 09:48
閱讀 1797·2021-09-22 15:22
閱讀 4232·2021-09-22 15:05
閱讀 697·2021-09-06 15:02
閱讀 2666·2019-08-30 15:52
閱讀 2172·2019-08-29 18:38
閱讀 2816·2019-08-28 18:05
閱讀 2379·2019-08-26 13:55