設計模式學習之裝飾者模式(Decorator)

2022-03-26 21:34:13 字數 718 閱讀 2385

作用:假設我們有乙個使用了八個物件的程式,由於需求變更,其中三個物件需要另外乙個屬性。讀者可以為這三個物件建立乙個派生類,在多數情況下,這是乙個完全可以接受的方案。然而,如果這三個物件中的每個物件都要求有不同的屬性,這就意味著要建立三個派生類。更進一步,如果其中乙個類具有其他兩個類中的屬性,可能就要建立更複雜的類,這既容易造成混亂也沒有必要————裝飾者模式給我們提供了這樣乙個方法:改變單個物件的行為,而不需要建立乙個新的派生類

實現要點:繼承和聚合。

uml圖和**:參看的寫log的例子,講的很好,我覺得自己寫乙個還不如直接照搬terryleee的了o(∩_∩)o哈哈~

我只想記一下 裝飾者模式和橋接模式(bridge)的區別:

誠如gof所說:「這些(設計模式)之間存在著本質上的相似性」——大多數人可能也意識到了,反正我是覺得gof把設計模式分為23種實在是有點分得太細了(難道是為了給出版社湊足頁數?),搞得現在很多人沒事幹就去研究某某設計模式與某某設計模式的區別。嗚呼哀哉!設計模式本身的目的是為了解決問題,而不是留下來做理論研究。只要解決了問題,沒必要探尋到底屬於那一種設計模式吧。

話歸正題,小區別肯定是有的,仔細看橋接模式和裝飾者模式的uml圖,我的理解:前者是分離+聚合,後者是繼承+聚合。前者是分離出抽象的東西當作新類,然後用聚合來滿足擴充套件,後者則是先繼承,然後用聚合來擴充套件和增強原來的類

設計模式之 裝飾者模式

一 裝飾者模式 裝飾者模式又稱為包裝模式。動態地給乙個物件增加新的職責。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者模式顧名思義就是對乙個物件進行裝飾,具體怎樣裝飾呢?那就是給這個物件不斷的增加職責方法。給乙個物件增加方法不簡單啊,用繼承或者直接在物件的類中增加方法。如果我們要對自...

設計模式之裝飾者模式

此模式動態將職責附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更具彈性的代替方案,以一圖一概括。要點1 裝飾者和被裝飾物件有相同的超型別。2 可以用乙個或多個裝飾者包裝乙個物件。3 裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。4 物件可以在任何時候被裝飾,所以可...

設計模式之裝飾者模式

public abstract class beverage 返回當前飲品的 public abstract double cost 為了讓condiment decorator 調料裝飾者 能夠取代beverage,所以將它擴充套件至beverage類 public abstract class ...