sponsored links

一文帶你看懂裝飾者模式

裝飾者模式

裝飾器模式(Decorator Pattern)允許向一個現有的物件新增新的功能,是一種用於代替繼承的技術,無需透過繼承增加子類就能擴充套件物件的新功能。使用物件的關聯關係代替繼承關係,更加靈活,同時避免型別體系的快速膨脹;

主要角色:

  • 元件(Component):元件介面定義了全部元件類和裝飾器實現的行為;
  • 元件實現類(ConcreteComponent):實現Component介面,元件實現類就是被裝飾器裝飾的原始物件,新功能或者附加功能都是透過裝飾器新增到該類的物件上的;
  • 裝飾器抽象類(Decorator):實現Component介面的抽象類,在其中封裝了一個Component 物件, 也就是被裝飾的物件;
  • 具體裝飾器類(ConcreteDecorator):該實現類要向被裝飾的物件新增某些功能;

類圖:

一文帶你看懂裝飾者模式

看具體的例子,就拿去火鍋店吃火鍋拌蘸料這個來說。

蘸料有很多:

而每個人的口味又不一樣。所以組合就非常多。這種情況下如果使用裝飾著模式來實現看看。

第一步

首先我們有一個行為拌蘸料(Component)

/**
 * @Author: jimmy
 * @Description:
 *   裝飾著模式 -
 *   元件(Component):元件介面定義了全部元件類和裝飾器實現的行為;
 */
public interface AllocatSeasoning {
    void allo();
}

接下來,按照上面裝飾者的模型進行分析,我們需要2個類來實現上面的行為

第二步

第一個類(ConcreteComponent)可以理解為裝拌料的碗,後面的加蘸料都放到這個碗裡面

/**
 * @Author: jimmy
 * @Description:
 *  元件實現類(ConcreteComponent):
 *    實現Component介面,元件實現類就是被裝飾器裝飾的原始物件,
 *    新功能或者附加功能都是透過裝飾器新增到該類的物件上的;
 *
 *  可以把這個理解為裝拌料的碗
 */
public class AllocDo implements AllocatSeasoning{

    @Override
    public void allo() {
        System.out.println("----- 您好,這邊是調料自選區,可以按照您的口味選擇自己喜歡的口味 -----");
    }
}

第三步

第二個類,這個類可以理解為抽象

/**
 * @Author: jimmy
 * @Description:
 *  裝飾器抽象類(Decorator):
 *        實現Component介面的抽象類,在其中封裝了一個Component 物件,
 *     也就是被裝飾的物件;
 *
 *    這個物件可以理解為已經準備好了,要去拿蘸料的動作的父級。
 *    AllocatSeasoning可以理解為 蘸料和婉的合體。
 */
public class AllocDecorator implements AllocatSeasoning{

    // 持有物件
    private AllocatSeasoning allocatSeasoning;

    // 構造器
    public AllocDecorator(AllocatSeasoning allocatSeasoning) {
        this.allocatSeasoning = allocatSeasoning;
    }

    // 呼叫對下個對應的方法
    @Override
    public void allo() {
        allocatSeasoning.allo();
    }
}

第四步

放具體的蘸料(ConcreteDecorator)這裡說白了就是 拿著放有蘸料的碗(可以是空碗)來放現在想放的蘸料。我這裡只給出了一個具體類,其他的有興趣可以把程式碼複製,然後補充下。

/**
 * @Author: jimmy
 * @Description:
 *    具體裝飾器類(ConcreteDecorator):該實現類要向被裝飾的物件新增某些功能;
 *  這裡說白了就是 拿著放有蘸料的碗(可以是空碗)來放現在想放的蘸料
 */
public class GarlicAlloc extends AllocDecorator{

    public GarlicAlloc(AllocatSeasoning allocatSeasoning) {
        super(allocatSeasoning);
    }

    @Override
    public void allo() {
        // 呼叫原有業務方法
        super.allo();
        // 補充我們這個行為的方法
        addGarlic();
    }

    public void addGarlic() {
        System.out.println("---加蒜---");
    }
}

測試類

public class DecoratorClinet {
    public static void main(String[] args) {
        AllocatSeasoning a = new OilAlloc(new GarlicAlloc(new ChilliAlloc(new AllocDo())));
        a.allo();
    }
}

執行結果:

----- 您好,這邊是調料自選區,可以按照您的口味選擇自己喜歡的口味 -----

---加辣椒---

---加蒜---

---加油---

一文帶你看懂裝飾者模式

分類: 家居
時間: 2021-09-18

相關文章

每年都過的中秋節,你真的懂麼?一文帶你看懂中秋節的來龍去脈

每年都過的中秋節,你真的懂麼?一文帶你看懂中秋節的來龍去脈
中國最重要的傳統節日是啥?除了春節以外,就屬中秋節了. 中國人對月亮似乎一直有種執念,幾千年前,就安排了大美女嫦娥姐姐奔月而去,這成了現在"有據可查"的登月第一人,最關鍵是去了就不 ...

一文帶你看懂未來十年房地產發展趨勢,掌握財富密碼,未來不迷茫

一文帶你看懂未來十年房地產發展趨勢,掌握財富密碼,未來不迷茫
房子建造出來是為了讓人們可以有居住的地方,只是未來幾十年裡,人們也見證了它的商品屬性,隨著人們對房屋的需求,經濟增長,購買土地,周邊環境等要求都會或多或少影響一個地區房價的走勢. 如今國家把" ...

新高考下交白卷也有30分?一文帶你看懂等級賦分

新高考下交白卷也有30分?一文帶你看懂等級賦分
近日的熱議話題莫過於黑龍江.甘肅.吉林.安徽.江西.貴州.廣西7省的新高考改革.這些省市高考中再選科目的等級分是如何轉換的?哪些因素影響等級賦分?考試交白卷也能賦分30?這些疑問小助將為大家整理相關內 ...

聊齋故事新編:海公子,一文帶你看懂人性

聊齋故事新編:海公子,一文帶你看懂人性
書生與歌姬相戀 話說登州的張生,讀書很用功,在十里八鄉內頗有才名. 他讀書一直有一個習慣,每當心情煩悶,不能專心於學業時,都要去城中心的麗春院--當地最有名的妓院逛一逛,喝一壺茶,吃幾碟點心,就圖放鬆 ...

《了不起的遊戲:京劇究竟好在哪兒》:導演郭寶昌帶您看懂京劇
<大宅門>系列劇導演郭寶昌,近日在生活·讀書·新知三聯書店出版京劇研究著作<了不起的遊戲:京劇究竟好在哪兒>.書的封面上,一老一少正在表演京劇傳統喜劇曲目<雙背凳> ...

五代十國是哪五代?哪十國?一分鐘帶你看懂

五代十國是哪五代?哪十國?一分鐘帶你看懂
五代十國,零零碎碎幾十個國家, 在中國歷史上存在感說強不強,說弱不弱, 想搞清楚難,搞不清楚,對理解之後的歷史也很難, 沒關係,今天混子哥就帶你走進--五代十國. #五代十國##後梁##耶律阿保機## ...

落入塔利班手中的美軍ABIS為何物?一文帶你讀懂生物識別技術的利與弊

落入塔利班手中的美軍ABIS為何物?一文帶你讀懂生物識別技術的利與弊
落入塔利班手中的美軍ABIS系統是種什麼高科技?為什麼被稱作當下最先進的生物識別技術?未來會不會讓你的個人資訊更加安全? 撰文/記者 趙天宇 圖文編輯/陳永傑 圖片來源/視覺中國 採訪專家: 於乃功 ...

紅樓裡錯亂的人物年齡,是作者寫作能力有問題,還是你沒看懂真相

紅樓裡錯亂的人物年齡,是作者寫作能力有問題,還是你沒看懂真相
題:紅樓裡錯亂的人物年齡,是作者寫作能力有問題嗎?還是你壓根沒看懂真相! 文/姜子說書 青埂峰下一頑石,曾記幻相併篆文,月旨石見<石頭記>! 榮即華兮華即榮,木石前盟西堂主,胭脂染就< ...

1.5L油耗2.0T豪華轎車,沒購置稅還便宜,帶你看寶馬5系新能源

1.5L油耗2.0T豪華轎車,沒購置稅還便宜,帶你看寶馬5系新能源
1.5L油耗2.0T豪華行政級轎車,沒購置稅價格還便宜,帶你看寶馬5系新能源 插電式混合動力車作為從燃油時代向電動時代轉變的銜接車型,很多人可能不會考慮,要麼買普通燃油版要麼買純電車,但是如果在考慮燃 ...

高銷量MPV高配低價大7座,7.9L油耗有降低,帶你看別克GL8

高銷量MPV高配低價大7座,7.9L油耗有降低,帶你看別克GL8
高銷量MPV高配低價大7座,7.9L油耗有降低,帶你看別克GL8 對於別克GL8,很多人印象裡這臺車價格應該是不便宜的,畢竟國內MPV市場論綜合評價和認知度,比克GL8都是最為優秀的車型之一.不過別克 ...

無框車門超低油耗,進口的德系豪華轎車,帶你看寶馬3系GT

無框車門超低油耗,進口的德系豪華轎車,帶你看寶馬3系GT
無框車門超低油耗,進口的德系豪華轎車,帶你看寶馬3系GT 隨著社會經濟的發展,汽車不再像以前一樣,屬於有錢人才買得起的商品,很多經濟條件一般的家庭也都能買得起車了.然而如今市面上的車可以說是層出不窮, ...

看懂賦分和選科,正確開啟安徽新高考模式

看懂賦分和選科,正確開啟安徽新高考模式
9月15日,安徽省召開高考綜合改革新聞釋出會.自2021年秋季高中新生入學起,全面實施普通高中學業水平考試.安徽作為第四批高考綜合改革省(區),總體沿襲取消文理分科.採取"3+1+2&quo ...

豆瓣9.5分佳作,JOJO系列《黃金之風》,你真的看懂了嗎?

豆瓣9.5分佳作,JOJO系列《黃金之風》,你真的看懂了嗎?
JOJO系列中已經出現了許多優秀的作品,對於其中的第五部<黃金之風>,這個在豆瓣獲取了9.5分高分的佳作,很多JO廚都會反覆觀看這一步,而每一次的觀看,都能夠得到新的體悟. ​ JOJO系 ...

蘋果iPhone13系列一圖看懂:購買哪個版本才真的香?

蘋果iPhone13系列一圖看懂:購買哪個版本才真的香?
iPhone13系列作為今年蘋果秋季新品釋出會的焦點,無疑引起了眾多消費者的關注.沒有熬夜看釋出會也不要緊,今天就帶你一圖看懂蘋果iPhone13系列.

十年前十大爆火劇,如今回看,狗血的一堆,當年沒看懂的才真經典

十年前十大爆火劇,如今回看,狗血的一堆,當年沒看懂的才真經典
河南中秋晚會,溫實初和沈眉莊再續前緣並且還he了.不少網友感慨,<甄嬛傳>留下的意難平終於圓滿. <甄嬛傳>已經播出十年.其實當年2011年還有不少爆紅劇,堪稱是神仙打架. 現 ...

​蜜蜂振動翅膀就是要攻擊?先別跑!3招教你看懂蜜蜂翅膀上的語言

​蜜蜂振動翅膀就是要攻擊?先別跑!3招教你看懂蜜蜂翅膀上的語言
蜜蜂是我們的生活中比較常見的一種小昆蟲,而且蜜蜂還擁有嚴格的等級制度,雖然只是一個小昆蟲的世界,但是卻看起啦如果我們人類的世界一樣井井有條. 如果我們接觸到一群蜜蜂,可能最先看到的蜜蜂就是蜂門口的蜜蜂 ...

肝功能檢查單拿在手裡怎麼看?醫生:3個指標,看懂不用找醫生

肝功能檢查單拿在手裡怎麼看?醫生:3個指標,看懂不用找醫生
肝功能檢查單拿在手裡怎麼看?醫生:3個指標,看懂不用找醫生 我們很多朋友每年都會做體檢,會查肝功能,但是這個檢查結果拿到手裡,卻不知道上面的數字,符號代表什麼意思,今天呢,羅醫生就教大家怎麼來看懂這個 ...

油耗1.3L,日系大空間銷冠SUV能解決指標,帶你看本田CR-V新能源

油耗1.3L,日系大空間銷冠SUV能解決指標,帶你看本田CR-V新能源
油耗1.3L,日系大空間銷冠SUV,能解決指標,帶你看本田CR-V新能源 本田一直以來的混動系統在燃油經濟性上都有較大的優勢,但是也有一個問題,就是不能上綠牌,在很多對混動車型開放新能源指標的城市也無 ...

《魔神英雄壇》,當年沒看懂,後來漸漸就懂了

《魔神英雄壇》,當年沒看懂,後來漸漸就懂了
聽說<神龍鬥士>出手遊了,為什麼沒廣告找我? 小時候看熱血格鬥類動畫往往喜歡看最後打鬥的段落,大了以後再把那些動畫翻出來看的時候,便覺得那些打鬥情節過於套路,雷同乏味.反而更喜歡角色們日常 ...