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

適配器模式----將一個(gè)類的接口,轉(zhuǎn)換成客戶期望的另一個(gè)接口蛋铆。適配器讓原本接口不兼容的類可以合作無間

適配器模式就如它的名字一樣馋评,簡(jiǎn)單來說就是給舊的類或者對(duì)象套上一層新的殼子,并創(chuàng)建現(xiàn)在需要調(diào)用的函數(shù)刺啦,在函數(shù)體里面復(fù)用舊的函數(shù)或加些新的業(yè)務(wù)邏輯留特,以滿足調(diào)用者的需要。

最直接的也是最常見的就是對(duì)象適配器

一玛瘸、對(duì)象適配器

對(duì)象適配器持有被適配者的實(shí)例蜕青,并實(shí)現(xiàn)了目標(biāo)接口。

實(shí)例:迭代器與枚舉器


早期Java集合類型都實(shí)現(xiàn)了一個(gè)名為elements()的方法糊渊。該方法返回一個(gè)Enumeration枚舉右核。這個(gè)Enumeration接口可以逐一遍歷集合中的每一個(gè)元素,而無需知道它們?cè)诩蟽?nèi)是如何被管理的:

當(dāng)Sun推出更新后的集合類時(shí)渺绒,開始使用了Iterator迭代器接口蒙兰,這個(gè)接口與枚舉接口的唯一區(qū)別是多了remove()方法:

在實(shí)際開發(fā)過程中常常會(huì)面對(duì)已有的代碼,這些遺留的代碼使用老方法處理芒篷,但現(xiàn)在我們希望使用新的方法來實(shí)現(xiàn)相同的功能搜变,這個(gè)時(shí)候就可以使用適配器模式。如上述我們希望使用迭代器來完成之前枚舉所做的事情可以這樣寫:

public class EnumerationIterator implements Iterator {
    Enumeration enum;

    public EnumerationIterator (Enumeration enum) {
        this.enum = enum;
    }

    public boolean hasNext() {
        return enum.hasMoreElements();
    }

    public Object next() {
        return enum.nextElement();
    }

    public void remove() {
        throw new UnsupportedOperationException();
    }
}

在這個(gè)類中针炉,該類持有Enumeration實(shí)例挠他,并實(shí)現(xiàn)了Iterator的接口,在Iterator的各個(gè)接口中完成了向Enumeration方法的轉(zhuǎn)變篡帕。

throw new UnsupportedOperationException() 是因?yàn)槊杜e并不支持對(duì)數(shù)據(jù)的修改殖侵,所以適配器無法實(shí)現(xiàn)有實(shí)際功能的remove方法,這種情況下拋出UnsupportedOperationException()異常

二镰烧、類適配器

類適配器與對(duì)象適配器的唯一區(qū)別在于類適配器同時(shí)繼承被適配者和目標(biāo)類拢军,然后在內(nèi)部重寫目標(biāo)類方法,實(shí)現(xiàn)適配怔鳖。

對(duì)象適配器采用組合方式將請(qǐng)求傳給被適配者茉唉,類適配器采用繼承的形式統(tǒng)一目標(biāo)類和被繼承者。

三、衍生

在實(shí)際應(yīng)用中度陆,代碼并不一定需要嚴(yán)格遵守上面所列出的適配器的規(guī)則艾凯,可以根據(jù)實(shí)際情況來變通。

如Android開發(fā)中的RecyclerView的Adapter懂傀,它實(shí)現(xiàn)了數(shù)據(jù)與視圖的綁定趾诗,或者說將數(shù)據(jù)適配給了視圖。

adapter方法

在使用Adapter的時(shí)候我們通常有兩步要做:

① 繼承Adapter并實(shí)現(xiàn)自己的Adapter
② 實(shí)現(xiàn)自己的viewHolder

這個(gè)適配器與對(duì)象適配器有些類似,盡管它既沒有包含被適配的對(duì)象,也沒有實(shí)現(xiàn)目標(biāo)接口忆家,但如果我們把它常常會(huì)包含的數(shù)據(jù)對(duì)象當(dāng)作被適配的對(duì)象染突,把繼承自父類的方法作為目標(biāo)接口的話就很好理解了。

這么一來,也就是說適配器模式其實(shí)不僅只適用于對(duì)舊方法的適配,也常常用于將數(shù)據(jù)適配給視圖。

參考

  • 《Head First 設(shè)計(jì)模式》
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末糕非,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子球榆,更是在濱河造成了極大的恐慌朽肥,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件持钉,死亡現(xiàn)場(chǎng)離奇詭異衡招,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)每强,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門始腾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人空执,你說我怎么就攤上這事浪箭。” “怎么了辨绊?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵奶栖,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我门坷,道長(zhǎng)宣鄙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任默蚌,我火速辦了婚禮冻晤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绸吸。我一直安慰自己鼻弧,他們只是感情好设江,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著温数,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜻势。 梳的紋絲不亂的頭發(fā)上撑刺,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音握玛,去河邊找鬼够傍。 笑死,一個(gè)胖子當(dāng)著我的面吹牛挠铲,可吹牛的內(nèi)容都是我干的冕屯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拂苹,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼安聘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瓢棒,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤浴韭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后脯宿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體念颈,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年连霉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了榴芳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡跺撼,死狀恐怖窟感,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情歉井,我是刑警寧澤肌括,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站酣难,受9級(jí)特大地震影響谍夭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜憨募,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一紧索、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧菜谣,春花似錦珠漂、人聲如沸晚缩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荞彼。三九已至,卻和暖如春待笑,著一層夾襖步出監(jiān)牢的瞬間鸣皂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工暮蹂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寞缝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓仰泻,卻偏偏與公主長(zhǎng)得像荆陆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子集侯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354