設計模式之Decorator 油漆工

2021-09-01 07:47:10 字數 920 閱讀 2988

裝飾模式:decorator常被翻譯成"裝飾",我覺得翻譯成"油漆工"更形象點,油漆工(decorator)是用來刷油漆的,那麼被刷油漆的物件我們稱decoratee.這兩種實體在decorator模式中是必須的.

decorator定義:

動態給乙個物件新增一些額外的職責,就象在牆上刷油漆.使用decorator模式相比用生成子類方式達到功能的擴充顯得更為靈活.

為什麼使用decorator?

我們通常可以使用繼承來實現功能的拓展,如果這些需要拓展的功能的種類很繁多,那麼勢必生成很多子類,增加系統的複雜性,同時,使用繼承實現功能拓展,我們必須可預見這些拓展功能,這些功能是編譯時就確定了,是靜態的.

使用decorator的理由是:這些功能需要由使用者動態決定加入的方式和時機.decorator提供了"即插即用"的方法,在執行期間決定何時增加何種功能.

如何使用?

舉adapter中的打樁示例,在adapter中有兩種類:方形樁 圓形樁,adapter模式展示如何綜合使用這兩個類,在decorator模式中,我們是要在打樁時增加一些額外功能,比如,挖坑 在樁上釘木板等,不關心如何使用兩個不相關的類.

我們先建立乙個介面:

public inte***ce work

介面work有乙個具體實現:插入方形樁或圓形樁,這兩個區別對decorator是無所謂.我們以插入方形樁為例:

public class squarepeg implements work

}現在有乙個應用:需要在樁打入前,挖坑,在打入後,在樁上釘木板,這些額外的功能是動態,可能隨意增加調整修改,比如,可能又需要在打樁之後釘架子(只是比喻).

那麼我們使用decorator模式,這裡方形樁squarepeg是decoratee(被刷油漆者),我們需要在decoratee上刷些"油漆",這些油漆就是那些額外的功能.

篇幅有限,請點這裡:[url]

Java設計模式之Decorator模式

感覺比之前理解深了一點,紅字為新理解的內容,小白看過來 首先,不抽象,舉個例子。我要去喝咖啡,咖啡店裡有兩種咖啡,一種摩卡的,一種藍山的,摩卡的50塊,藍山的100塊。買了咖啡後還能放配料,有牛奶和伴侶。牛奶10塊一包,伴侶高階一 點,15塊一包。現在店裡新上貨一種配料方糖,5塊錢一包,現在把上述的...

設計模式之裝飾模式(Decorator)

現在有這樣乙個場景,需要給乙個人穿不同風格的衣服,那在物件導向的思想下應該怎麼寫呢 class person public void show abstract class finery class tshirts extends finery class pants extends finery ...

設計模式之裝飾模式(Decorator)

1 裝飾者模式,動態地將責任附加到物件上。若要擴充套件功能,裝飾者提供了比繼承更加有彈性的替代方案。2 組合和繼承的區別 繼承。繼承是給乙個類新增行為的比較有效的途徑。通過使用繼承,可以使得子類在擁有自身方法的同時,還可以擁有父類的方法。但是使用繼承是靜態的,在編譯的時候就已經決定了子類的行為,我們...