學(xué)好設(shè)計(jì)模式防被祭天:組合模式

組合模式

為了防止被“殺”了祭天螃征,學(xué)點(diǎn)設(shè)計(jì)模式潮罪,并總結(jié)下還是有必要的寒砖。

一:理解

  1. 組合模式最普遍的例子就是文件系統(tǒng)和組織架構(gòu)谅猾。
  2. 一個(gè)對(duì)象可以看成是部分荐吵,多個(gè)對(duì)象以一定方式組合在一起是整體。在組合模式中赊瞬,部分和整體都用同一個(gè)類(lèi)表示先煎。
  3. 在組織架構(gòu)的例子中,組合模式把每個(gè)人都看作是一個(gè)組織巧涧,每個(gè)人都可以擁有自己的下屬薯蝎,同時(shí)每個(gè)下屬又都被看作是組織。


二:例子

你是個(gè)富二代谤绳。

你有很多女朋友占锯,然而你最近悶悶不樂(lè),生無(wú)可戀缩筛。

因?yàn)槟憧嘤谡也坏揭粋€(gè)管理那么多女朋友的好方法消略。

生無(wú)可戀

你決定效仿古代帝王,為你的女朋友們分等級(jí)瞎抛,等級(jí)高的女朋友可以有多個(gè)小妹艺演。

每次,你想papapa時(shí)桐臊,只需找到女朋友頭子胎撤,順著她的小妹網(wǎng)絡(luò),就可以找到所有女朋友断凶。

你被自己的高智商所折服伤提。

然而,你希望可以用更優(yōu)雅的辦法來(lái)抽象這個(gè)女朋友組織架構(gòu)认烁。

于是肿男,你叫來(lái)了程序員小菜幫忙介汹。

小菜上來(lái)就是一頓敲,他考慮到:

  1. 女友頭子所有管理多個(gè)小妹舶沛,但她和小妹其實(shí)沒(méi)什么區(qū)別痴昧,都是你的女朋友」谕酰可以用組合模式
  2. 女朋友頭子的小妹可以用List保存舌镶。
@Data
public class GirlFriend {
    private String name;
    private List<GirlFriend> xiaoMeiList;

    public GirlFriend(String name) {
        xiaoMeiList = Lists.newArrayList();
        this.name = name;
    }

    public void papapa() {
        System.out.println("如果你追到" + name + "," + name + "就和你嘿嘿嘿!");
    }

    public void addXiaMei(GirlFriend girlFriend) {
        xiaoMeiList.add(girlFriend);
    }

    public void remove(GirlFriend girlFriend) {
        xiaoMeiList.remove(girlFriend);
    }

    public void continuousPapapa(int depth) {
        for (int i = 0; i < depth; i++) {
            System.out.print("--");
        }
        papapa();
        for (GirlFriend xiaoMei : xiaoMeiList) {
            xiaoMei.continuousPapapa(depth + 1);
        }
    }
}

女朋友類(lèi)GirlFriend包含屬性名字name屬性柱彻,包含小妹隊(duì)列屬性,隊(duì)列的類(lèi)型還是GirlFriend餐胀,因?yàn)樾∶靡彩桥笥选?/p>

女朋友類(lèi)中哟楷,有增加刪除小妹的方法。

此外否灾,還有一個(gè)continuousPapapa方法卖擅,你和一個(gè)女朋友papapa之后,你可以和她所有的小妹都papapa墨技。

是不是想想就覺(jué)得很激動(dòng)惩阶。

小菜寫(xiě)了一個(gè)測(cè)試程序給你看,除了模擬建立女朋友組織架構(gòu)的代碼之外扣汪,只需要調(diào)用女朋友頭子的continuousPapapa方法断楷。

public class Client {
    public static void main(String[] args) {
        GirlFriend TouZi = new GirlFriend("女朋友頭子");

        // 一級(jí)
        GirlFriend Mary = new GirlFriend("Mary");
        GirlFriend Lily = new GirlFriend("Lily");

        // 二級(jí)
        GirlFriend MaryXiaoMei1 = new GirlFriend("MaryXiaoMei1");
        GirlFriend MaryXiaoMei2 = new GirlFriend("MaryXiaoMei2");
        GirlFriend LilyXiaoMei1 = new GirlFriend("LilyXiaoMei1");

        // 三級(jí)
        GirlFriend MaryXiaoMei1XiaoMei1 = new GirlFriend("MaryXiaoMei1XiaoMei1");

        Mary.addXiaMei(MaryXiaoMei1);
        Mary.addXiaMei(MaryXiaoMei2);

        Lily.addXiaMei(LilyXiaoMei1);

        MaryXiaoMei1.addXiaMei(MaryXiaoMei1XiaoMei1);

        TouZi.addXiaMei(Mary);
        TouZi.addXiaMei(Lily);
        // 一步完成
        TouZi.continuousPapapa(0);
    }
}

輸入/輸出:

如果你追到女朋友頭子,女朋友頭子就和你嘿嘿嘿!
--如果你追到Mary,Mary就和你嘿嘿嘿!
----如果你追到MaryXiaoMei1,MaryXiaoMei1就和你嘿嘿嘿!
------如果你追到MaryXiaoMei1XiaoMei1,MaryXiaoMei1XiaoMei1就和你嘿嘿嘿!
----如果你追到MaryXiaoMei2,MaryXiaoMei2就和你嘿嘿嘿!
--如果你追到Lily,Lily就和你嘿嘿嘿!
----如果你追到LilyXiaoMei1,LilyXiaoMei1就和你嘿嘿嘿!

看到這個(gè)程序,你開(kāi)心到起飛崭别。

開(kāi)心到起飛

不僅可以做到優(yōu)雅的管理冬筒,而且可以擁有和古代帝王擁有一樣的享受。


三:再理解

  1. 組合模式茅主,將對(duì)象組合成樹(shù)形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)舞痰,組合模式使得用戶(hù)對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。
  2. 組合模式中诀姚,類(lèi)的其中某個(gè)屬性引用了類(lèi)本身的對(duì)象响牛,做到部分和整體共用一個(gè)類(lèi)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赫段,一起剝皮案震驚了整個(gè)濱河市娃善,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瑞佩,老刑警劉巖聚磺,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異炬丸,居然都是意外死亡瘫寝,警方通過(guò)查閱死者的電腦和手機(jī)蜒蕾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)焕阿,“玉大人咪啡,你說(shuō)我怎么就攤上這事∧郝牛” “怎么了撤摸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)褒纲。 經(jīng)常有香客問(wèn)我准夷,道長(zhǎng),這世上最難降的妖魔是什么莺掠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任衫嵌,我火速辦了婚禮,結(jié)果婚禮上彻秆,老公的妹妹穿的比我還像新娘楔绞。我一直安慰自己,他們只是感情好唇兑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布酒朵。 她就那樣靜靜地躺著,像睡著了一般扎附。 火紅的嫁衣襯著肌膚如雪耻讽。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天帕棉,我揣著相機(jī)與錄音针肥,去河邊找鬼。 笑死香伴,一個(gè)胖子當(dāng)著我的面吹牛慰枕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播即纲,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼具帮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了低斋?” 一聲冷哼從身側(cè)響起蜂厅,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎膊畴,沒(méi)想到半個(gè)月后掘猿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唇跨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年稠通,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衬衬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡改橘,死狀恐怖滋尉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情飞主,我是刑警寧澤狮惜,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站碌识,受9級(jí)特大地震影響碾篡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜丸冕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望薛窥。 院中可真熱鬧胖烛,春花似錦、人聲如沸诅迷。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)罢杉。三九已至趟畏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間滩租,已是汗流浹背赋秀。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留律想,地道東北人猎莲。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像技即,于是被迫代替她去往敵國(guó)和親著洼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 為了防止被“殺”了祭天而叼,學(xué)點(diǎn)設(shè)計(jì)模式身笤,并總結(jié)下還是有必要的。 一:理解 所謂迭代器模式就是提供一種方法順序訪問(wèn)一個(gè)...
    阿菜的博客閱讀 551評(píng)論 2 1
  • 為了防止被“殺”了祭天葵陵,學(xué)點(diǎn)設(shè)計(jì)模式液荸,并總結(jié)下還是有必要的。 一:理解 對(duì)象包含策略脱篙,可以根據(jù)不同對(duì)象的策略莹弊,執(zhí)行...
    阿菜的博客閱讀 615評(píng)論 3 18
  • 彎腰俯首唱歌謠忍弛,雙手妝成綠萬(wàn)條响迂。 細(xì)雨紛紛親面部,和風(fēng)煦煦吻眉梢 田肥苗壯蛙聲鬧细疚,葉茂根深燕語(yǔ)嘈 秋后家家傳笑語(yǔ)蔗彤,...
    艾思閱讀 903評(píng)論 0 4
  • 星月滿(mǎn)天應(yīng)璨,如幻疯兼,夜?jié)u濃 只白駒罅隙中過(guò)然遏,花落,亦匆匆
    舜華NA閱讀 94評(píng)論 1 1
  • 燈光漸漸縮小吧彪,諸影諸物待侵,無(wú)不解散,而且搖動(dòng)姨裸,趁碎影還在秧倾,無(wú)怨 的恕,胡說(shuō)而罷傀缩。常想在紛擾之中尋出一點(diǎn)嫻靜下來(lái)那先,然而...
    ebb97922b992閱讀 441評(píng)論 0 6