結(jié)構(gòu)型設(shè)計模式之適配器浙芙,合成, 裝飾

1:適配器模式

一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作

類適配器模式

適配的類的API轉(zhuǎn)換成為目標類的API搞疗,使用繼承關(guān)系嗤朴,新增接口的方式來適配

對象適配器模式

不同是使用委派關(guān)系娱仔,適配器的構(gòu)造方法中傳入對象的方式來適配沐飘,

建議使用對象適配器模式
Android中的Listview和BaseAdapter的關(guān)mListview.setAdapter(mAdapter)就是對象適配器模式

參考: Android源碼之ListView的適配器模式

缺省適配模式

不準備實現(xiàn)一個接口的所有方法時,就可以使用“缺省適配模式”制造一個抽象類,給出所有方法的平庸的具體實現(xiàn)耐朴。這樣抽象類再繼承下去的子類就不必實現(xiàn)所有的方法了借卧。

Android中基類BaseActivity經(jīng)常有initView(),initEvent()筛峭,initData()铐刘,但是有的頁面不需要都去實現(xiàn)三個方法,可以使用缺省適配一下影晓,保證一些頁面不必實現(xiàn)所有方法镰吵!

參考:
《JAVA與模式》之適配器模式

2:合成模式(組合模式)

使用面向?qū)ο蟮乃枷雭? 統(tǒng)一抽象了容器和葉子的公共抽象組件,然后對整體進行遞歸組合實現(xiàn)樹形結(jié)構(gòu)的構(gòu)建與處理

組合模式可以清楚地定義分層次的復(fù)雜對象挂签,表示對象的全部或部分層次疤祭,它讓客戶端忽略了層次的差異,方便對整個層次結(jié)構(gòu)進行控制饵婆。

在組合模式中增加新的容器構(gòu)件和葉子構(gòu)件都很方便勺馆,無須對現(xiàn)有類庫進行任何修改,符合“開閉原則”侨核。

透明式合成模式的結(jié)構(gòu)與安全式合成模式不同的是草穆,公共抽象構(gòu)建的不同,包括了容器和葉子全部方法的是透明搓译,而容器和葉子還需單獨構(gòu)建的是安全模式悲柱。

適用場景

  在以下情況下可以考慮使用組合模式:

  (1) 在具有整體和部分的層次結(jié)構(gòu)中,希望通過一種方式忽略整體與部分的差異侥衬,客戶端可以一致地對待它們。

  (2) 在一個使用面向?qū)ο笳Z言開發(fā)的系統(tǒng)中需要處理一個樹形結(jié)構(gòu)跑芳。

  (3) 在一個系統(tǒng)中能夠分離出葉子對象和容器對象轴总,而且它們的類型不固定,需要增加一些新的類型博个。

參考: java設(shè)計模式之組合模式 不錯

3: 裝飾模式(包裝模式)

動態(tài)地給一個對象添加一些額外的職責(zé)

例如:Decorator裝飾類中怀樟,動態(tài)實現(xiàn)了對象的功能職責(zé)

public abstract class Decorator implements Person {

    protected Person person;
    
    public void setPerson(Person person) {
        this.person = person;
    }
    
    public void eat() {
        person.eat();
    }
}

實例化的裝飾A,在對象原來功能下super.eat()盆佣,動態(tài)增加了新的功能reEat()

public class ManDecoratorA extends Decorator {

    public void eat() {
        super.eat();
        reEat();
        System.out.println("ManDecoratorA類");
    }

    public void reEat() {
        System.out.println("再吃一頓飯");
    }
}

參考:
java模式—裝飾者模式

裝飾和繼承的區(qū)別:
裝飾模式可以提供比繼承更多的靈活性往堡。裝飾模式允許系統(tǒng)動態(tài)決定“貼上”一個需要的“裝飾”,或者除掉一個不需要的“裝飾”共耍。繼承關(guān)系則不同虑灰,繼承關(guān)系是靜態(tài)的,它在系統(tǒng)運行前就決定了

缺點:比使用繼承關(guān)系更多的對象痹兜。更多的對象會使得查錯變得困難穆咐,特別是這些對象看上去都很相像

透明性的要求
對的

TheGreatestSage sage = new Monkey();
TheGreatestSage bird = new Bird(sage);

錯的

Monkey sage = new Monkey();
Bird bird = new Bird(sage);

半透明的裝飾模式

在增強性能的時候,往往需要建立新的公開的方法。導(dǎo)致了大多數(shù)的裝飾模式的實現(xiàn)都是“半透明”的对湃,而不是完全透明的崖叫。換言之,允許裝飾模式改變接口拍柒,增加新的方法心傀。

裝飾模式的用意是在不改變接口的前提下,增強所考慮的類的性能

半透明的裝飾模式是介于裝飾模式和適配器模式之間的拆讯。適配器模式的用意是改變所考慮的類的接口脂男,也可以通過改寫一個或幾個方法,或增加新的方法來增強或改變所考慮的類的功能往果。大多數(shù)的裝飾模式實際上是半透明的裝飾模式疆液,這樣的裝飾模式也稱做半裝飾、半適配器模式陕贮。

對象的適配器模式中也是構(gòu)造方法中傳入對象堕油,對象委派方法實現(xiàn),不同的是適配器不改變功能

image.png

參考: 《JAVA與模式》之裝飾模式 很棒

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肮之,一起剝皮案震驚了整個濱河市掉缺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌戈擒,老刑警劉巖眶明,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異筐高,居然都是意外死亡搜囱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門柑土,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜀肘,“玉大人,你說我怎么就攤上這事稽屏“绯瑁” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵狐榔,是天一觀的道長坛增。 經(jīng)常有香客問我,道長薄腻,這世上最難降的妖魔是什么收捣? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮庵楷,結(jié)果婚禮上坏晦,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好昆婿,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布球碉。 她就那樣靜靜地躺著,像睡著了一般仓蛆。 火紅的嫁衣襯著肌膚如雪睁冬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天看疙,我揣著相機與錄音豆拨,去河邊找鬼。 笑死能庆,一個胖子當著我的面吹牛施禾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播搁胆,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼弥搞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了渠旁?” 一聲冷哼從身側(cè)響起攀例,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎顾腊,沒想到半個月后粤铭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡杂靶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年梆惯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吗垮。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡垛吗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出抱既,到底是詐尸還是另有隱情职烧,我是刑警寧澤扁誓,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布防泵,位于F島的核電站,受9級特大地震影響蝗敢,放射性物質(zhì)發(fā)生泄漏捷泞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一寿谴、第九天 我趴在偏房一處隱蔽的房頂上張望锁右。 院中可真熱鬧,春花似錦、人聲如沸咏瑟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽码泞。三九已至兄旬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間余寥,已是汗流浹背领铐。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宋舷,地道東北人绪撵。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像祝蝠,于是被迫代替她去往敵國和親音诈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354