sponsored links

巧妙的運用裝飾器,讓你的程式碼高出一個逼格

又到了週末了,小編祝各位網友中秋快樂,闔家團圓!同時,節日期間,阿粉不打烊,歡迎網友觀看吐槽~

一、介紹

裝飾器模式,顧名思義,就是在一個類上增加功能,以起到裝飾的作用。

我們都知道,如果想給某個類新增功能,但又要避免在原類上修改程式碼,最常用的方式就是新增一個類來繼承目標類,但是如果增加多的話,會使類的數量爆炸式增長,為管理帶來巨大的麻煩,裝飾器模式就比較好地解決了這一點。

從設計的角度看,裝飾器模式涉及到四個角色:

  • 被裝飾類:要進行擴充套件的源類;
  • 裝飾器類:透過該類可以給被裝飾類動態新增額外的方法,多以抽象為主;
  • 具體的裝飾類:該類實現自裝飾器類,已完成完整的演算法;
  • 客戶角色:客戶類提出使用具體類的請求;

今天我們一起來看看深度瞭解一下裝飾器的玩法!

二、程式碼示例

下面以生產一件衣服為例,一塊布料裁剪好了之後做出的衣服樣子還可以,但是這樣的衣服是賣不出去的,因為毫無美感,因此我們需要透過一些裝飾來使衣服變得好看。

我們先來建立一個抽象類或者介面,定義一個骨架,如下:

/**
 * 建立基本骨架
 */
public interface Clothes {

    void makeClothes();
}

接著建立一個我們需要裝飾的源類,如下:

/**
 * 被裝飾類
 */
public class MakeClothes implements Clothes {

    @Override
    public void makeClothes() {
        System.out.println("製作一件衣服");
    }
}

再來建立我們的主角,裝飾類,如下:

/**
 * 裝飾類
 */
public class Decorator implements Clothes {

    private Clothes clothes;

    public Decorator(Clothes clothes) {
        this.clothes = clothes;
    }

    @Override
    public void makeClothes() {
        clothes.makeClothes();
    }

}

最後,分別建立兩個具體的裝飾類,如下:

/**
 * 具體的裝飾類
 */
public class EmbroideryDecorator extends Decorator {

    public EmbroideryDecorator(Clothes clothes) {
        super(clothes);
    }

    @Override
    public void makeClothes() {
        super.makeClothes();
        System.out.println("給衣服繡制花朵");
    }
}
/**
 * 具體的裝飾類
 */
public class MickeyDecorator extends Decorator {

    public MickeyDecorator(Clothes clothes) {
        super(clothes);
    }

    @Override
    public void makeClothes() {
        super.makeClothes();
        System.out.println("給衣服繪製米老鼠圖案");
    }
}

怎麼用呢?請看下面的測試類:

/**
 * 客戶端
 */
public class DecorateClient {

    public static void main(String[] args) {
        Clothes clothes = new MakeClothes();
        clothes = new EmbroideryDecorator(clothes);//給衣服繡花
        clothes = new MickeyDecorator(clothes);//給衣服新增米老鼠圖案
        clothes.makeClothes();
        System.out.println("成品已經完成!");
    }
}

輸出結果如下:

製作一件衣服
給衣服繡制花朵
給衣服繪製米老鼠圖案
成品已經完成

從結果上,可以看到,我們成功的給MakeClothes這個類,動態添加了2個方法,一個是給衣服繡花,另一個是給衣服新增米老鼠圖案,最後成品完成!

可見裝飾的效果還不錯~

三、應用

其實在 jdk 中,裝飾者設計模式也有很多典型的場景應用,例如我們熟悉的io包中的位元組輸入、輸出流,就用到了裝飾者設計模式!

巧妙的運用裝飾器,讓你的程式碼高出一個逼格

其中FilterInputStream、FilterOutputStream就是裝飾類,用於動態給輸入、輸出流增加方法!

四、總結

巧妙採用裝飾器模式,可以很好的解決類繼承數量過多的問題,讓程式碼清晰可讀。

但是如果裝飾層數過多,也會影響到程式碼的維護,因此在實際的使用過程中,還需靈活使用!

原文連結:https://mp.weixin.qq.com/s/8VM5PSbByoH5jgYg1bwVgA

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

相關文章

深圳屋主家中的高階場面:堅持打滿櫃子,效果不是一般的大氣實用

深圳屋主家中的高階場面:堅持打滿櫃子,效果不是一般的大氣實用
帶倆娃,還能把家收拾得井井有條.一塵不染,你相信嗎? 很多人認為不可能,但是本案這對深圳夫妻就做到了.而秘訣也很簡單,那就是堅持全屋打滿櫃子,這樣雜物就能透過"藏藏藏",來實現乾淨 ...

別克昂科威Plus艾維亞 七座版,尺寸有著明顯增加,更沉穩、大氣

別克昂科威Plus艾維亞 七座版,尺寸有著明顯增加,更沉穩、大氣
昂科威一直以來都是別克家族最暢銷的SUV車型,如今它已經開枝散葉,形成了昂科威.昂科威S和昂科威Plus等車型組合,它們之間也有很大的定位差異.昂科威早在2014年上市歷經了幾次改款,但始終沒有換代, ...

一文帶你看懂裝飾者模式

一文帶你看懂裝飾者模式
裝飾者模式 裝飾器模式(Decorator Pattern)允許向一個現有的物件新增新的功能,是一種用於代替繼承的技術,無需透過繼承增加子類就能擴充套件物件的新功能.使用物件的關聯關係代替繼承關係,更 ...

相見恨晚的清潔神器——玻妞388擦窗機器人分享

相見恨晚的清潔神器——玻妞388擦窗機器人分享
前言 窗戶的清潔對於普通家庭而言可以說是一個相當大的難題,因為髒汙集中於外側,想把手伸出去擦拭即不安全也不方便,同時一些房間內的窗可能會因為傢俱的擺放而沒有落腳點,更是難以擦拭.可以自動清潔外側玻璃的 ...

民國的時候,有一件少見的錫器,據說可以在盛夏的時候滅蚊子

民國的時候,有一件少見的錫器,據說可以在盛夏的時候滅蚊子
在民間收藏圈,總是有很多奇奇怪怪的藏品,它們或年代久遠,或造型怪異,或功能神奇,有的甚至讓文物專家都直呼不可思議.比如,江蘇揚州展覽會曾展示過一件點銅神器,據說是民國時期的文物,雖然年代不算古老,但是 ...

仁壽豐巢裝飾案例:永興濱湖一號效果圖,仁壽濱湖一號裝修效果圖

仁壽豐巢裝飾案例:永興濱湖一號效果圖,仁壽濱湖一號裝修效果圖
仁壽永興·濱湖一號是由仁壽本土的永興地產打造的專案,位於仁壽城北溼地公園旁,附近有永輝超市.中鐵仁禾購物廣場等等,休閒.娛樂和購物方便,交通網路四通八達,出行方便快捷. 永興·濱湖一號作為永興2018 ...

分享一套現代家居設計,奶油色的裝飾和舒適的燈光增添了時尚優雅

分享一套現代家居設計,奶油色的裝飾和舒適的燈光增添了時尚優雅
奶油色的裝飾和舒適的燈光讓這套現代家居室內充滿了平靜別緻的家居設計,在柔和的圓形圖案下,由時尚的現代傢俱流暢地塑造而成.現代照明解決方案成為主導主題,大量的壁燈.落地燈.現代枝形吊燈和檯燈匯聚在一起, ...

2022瓷磚設計新趨勢:風格化大理石、暖色、極簡、大面積裝飾……

2022瓷磚設計新趨勢:風格化大理石、暖色、極簡、大面積裝飾……
10月伊始,伴隨第38屆CERSAIE(義大利博洛尼亞陶瓷衛浴展)落幕. CERSAIE自1983年建立至今,每年一屆.2020年則是從第一屆舉辦起近40年內,第一次因疫情停辦,雖然舉辦方曾希望以延期 ...

取經路上的國磚hifi播放器,初露鋒芒,卻難掩硬傷

取經路上的國磚hifi播放器,初露鋒芒,卻難掩硬傷
外國的HIFI播放器,我接觸的​並不多.一是因為價格昂貴,二是因為我沒錢買.國磚,我倒是玩過不少,除了大家比較熟悉的那幾家,還有幾款小眾的自制diy HIFI播放器品牌.​聽的​多了,反而越聽越麻木, ...

美國藏中國二十大國寶級文物

美國藏中國二十大國寶級文物
西方世界歷來對中國文物一直興趣濃厚,尤其是20世紀初,那時中國國力衰弱,許多文物被走私盜賣,文物流失到海外,令人十分痛心.其中美國是收藏中國文物最多的國家之一,美國的大型博物館幾乎都有東方館或專門設立 ...

朱虹:十論江西文化(二)

朱虹:十論江西文化(二)
1.文化江西的歷史脈絡 2.傳播江西聲音的方式與技巧 3.朱子文化飛入尋常百姓家 4.茶文化與"一帶一路" 5.江西文化"五個十" 6.讓書香飄滿贛鄱大地 7. ...

我國第三批禁止出國展覽文物,品味古代中國的極致藝術典範(上)

我國第三批禁止出國展覽文物,品味古代中國的極致藝術典範(上)
隨著我國改革開放的深化和對外文化交流的擴大,文物出國(境)展覽呈現出日益繁榮的局面.但是也由此加大了文物遭受損害的可能性,對文物的安全構成了潛在威脅.對此,國家文物局根據地方文物部門和有關方面專家的意 ...

珠寶文化 | 各國末代王后珠首飾揭秘,製作難度超乎你的想象

珠寶文化 | 各國末代王后珠首飾揭秘,製作難度超乎你的想象
提及婉容,很多人隱約的印象都是末代皇后,溥儀的妻子.而對她終生抑鬱.不得善終的過往,知之甚少.她的一生極致雍容過.深愛過.放縱過,然而最後陪著她的,只有冰冷的翡翠珠寶. 今天這篇文章呢,小編想給大家分 ...

國寶迴歸,100件迴流文物見證中國的治亂興衰(三)

國寶迴歸,100件迴流文物見證中國的治亂興衰(三)
據中國文物學會統計,從1840年以來,因戰爭被劫掠以及盜掘.盜鑿.不正當貿易等非法和不道德的方式,有超過1000萬件文物流失海外,其中國家一.二級文物達100餘萬件.新中國成立以來,先後有300批次. ...

日本街頭“老年人”多會穿?穿衣簡單日常,不扮嫩不老氣,太講究

日本街頭“老年人”多會穿?穿衣簡單日常,不扮嫩不老氣,太講究
今日好啊~ 每一個女人,都可以不輸給歲月的"殺豬刀".追逐屬於自己的風采,需要付出很多,也會得到相應的回報.在生活中,經過足夠的付出與努力,也會磨練出一個精明能幹.神采奕奕的&qu ...

上海的老奶奶真會穿,不扮嫩不老氣,用態度告訴你:時尚不分年齡

上海的老奶奶真會穿,不扮嫩不老氣,用態度告訴你:時尚不分年齡
今日好啊~ 每一個女人,都可以不輸給歲月的"殺豬刀".追逐屬於自己的風采,需要付出很多,也會得到相應的回報.未必人人都是容貌絕佳的時代佳人,但在自己從事的行業,自己所在的崗位上,足 ...

老公非要廚房全改玻璃門,廁所對床還不隔斷,竟完爆鄰居家

老公非要廚房全改玻璃門,廁所對床還不隔斷,竟完爆鄰居家
你的婚房的主題會是什麼呢? 今天這個案例是一套婚房,夫妻倆都是非常有想法的人,希望新家能打破千篇一律,兼具顏值和實用性.但同時也存在一些矛盾: 主衛對床,但怕風水不好 想要開放式廚房,但怕油煙 喜歡很 ...

參觀完100個日本家庭,終於知道我家怎麼設計了

參觀完100個日本家庭,終於知道我家怎麼設計了
說到日本家居,不管是從美觀上還是從實用性上說,都是值得很多人學習的,為什麼所謂"日式設計"能夠讓使用者感到舒適與自在呢? △在這個網站上,小幫看了不下100個日本家庭,也汲取了很多 ...

宜家最值得買的8件家居好物,便宜不說還實用,真心推薦

宜家最值得買的8件家居好物,便宜不說還實用,真心推薦
宜家這幾年來實際上褒貶不一,有人說它便宜.設計好,也有人說它廉價.質量差,總而言之,也各有幾分道理,那麼在宜家裡,到底有哪些家居好物是真正值得買的呢? 今兒我就和大家分享8種最值得買的宜家好物! 一. ...