將電腦思維故事化——之設計模式裝飾模式

來源:互聯網
上載者:User

標籤:

“我要買一個裝東西的袋子”

——如果需要搬家裡的行李,這句話可能會發生在超市裡。


那麼,上述提到的三個名詞——“東西”、“袋子”和“行李”,應該是如關係:

 

(1)行李,是一樣東西

(2)袋子,也是一樣東西

(3)袋子,可以裝行李

通過以上三句話的關係,可以得出結論:第一,袋子可以裝東西,雖然其本身就是一樣東西;第二,裝了東西的袋子,還是一樣東西。所以,可以在行李的基礎上,不斷地套袋子,且不管加多少層,最後得到的還是一樣東西。

 

“袋子是東西,袋子可以裝東西,裝了東西的袋子仍是東西。”

——這是一句繞口的話。這篇文章所介紹的設計模式,就是在這句話的基礎上展開的,叫裝飾模式(或“封裝器模式”)。

【在軟體開發思想中,“行李”和“袋子”是具體的稱呼,“東西”是抽象的稱呼,它們之間的關係稱作“繼承”;抽象的名詞被稱為“父類”,具體的名詞被稱為“子類”。】

 

一句話解釋裝飾模式就是——用“東西”裝“東西”,裝了之後還是“東西”

【“東西”既是“袋子”的父類,也是“行李”的父類,被稱為“共同父類”或“基類”。】

 

當我們需要為某部分行李(而不是全部行李)添加某些保護的時候(比如:防震、防水),只需要依次套上袋子(防震袋、防水袋)即可。

【“裝飾模式”,動態地給一個對象添加一些額外的功能。當有時候希望給某個對象而不是整個類添加一些功能時,可以考慮裝飾模式。需要說明的是,添加裝飾的順序是有關係的。】

 

值得一提的是,其中的“袋子”和“行李”兩個部分可以進一步發展成兩個分支。“袋子”可以進一步發展成“防震袋”、“防水袋”等若干類型,“行李”可以進一步發展成“甲的行李”、“乙的行李”等若干類型,且兩分支互不影響

【裝飾類和被裝飾類可以獨立發展,不會相互耦合。】

 

所以,在日常生活打包過程中,可以寥寥幾句話完成對某部分行李的打包,例如:“把甲的行李拿過來,加個防震袋,再加個防水袋”;“把乙的行李拿過來,加個防水袋,再加一個壓縮氣壓袋”

【在各對象彼此不影響的情況下,以動態、透明公開的方式給某個單獨對象添加功能。但需要注意的是:過多層數的裝飾是比較複雜的,因此,盡量減少裝飾類的數量,以便降低系統的複雜度。


虛擬碼:

東西 a = new 甲行李();

a = new 防震袋(a);

a = new 防水袋(a);

 

東西 b = new 乙行李();

b = new 防水袋(b);

b = new 壓縮氣壓袋(b);

【以基類類型為參數類型,傳入建構函式參數列表】




* 思維碰撞,不要忘了與好友分享!未來將推出“將電腦思維故事化”系列,謝謝大家的關注!*

將電腦思維故事化——之設計模式裝飾模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.