[大話設計模式] 重點筆記:裝飾模式 (Decorator)

  • 5129
  • 0
  • 2011-08-12

[大話設計模式] 重點筆記:裝飾模式 (Decorator)

[Ch.06]

原文定義:

Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.

UML圖:

p.75或參考這裡

使用時機:

1.系統需要新增新功能,但不想因為過多的子類別繼承造成系統快速膨脹。
2.類別需要「動態」附加新功能時。


模式特色:

1.Component無需知道Decorator的存在。
2.Decorator繼承Component,從外部擴展Component類別的功能。
3.如果只有一個ConcreteComponent而沒有抽象的Component,那麼Decorator可以是ConcreteComponent的子類別
4.如果只有一個ConcreteDecorator,就不須單獨建立Decorator。
5.將欲裝飾(動態增加)的功能放在單獨的類別中,並讓這個類別包裝他要裝飾的物件,
  由於在這個模式下所有物件都「是一種」Component,所以可將這些裝飾功能加以動態組合串接。


例子:

在.NET的System.IO中,Stream是一個抽象類別,定義了Read/Write抽象方法。MemoryStream、FileStream、NetworkStream都繼承自Stream類別,實現對不同標的物的讀寫動作。BufferedStream及CryptoStream為裝飾類別,譬如說,我們可以使用CryptoStream動態替任意Stream加入「加解密」功能。

參考資料:

http://www.dofactory.com/Patterns/PatternDecorator.aspx
http://www.cnblogs.com/springyangwc/archive/2011/04/23/2025389.html
http://www.cnblogs.com/Terrylee/archive/2006/03/01/340592.html
http://kb.cnblogs.com/page/68695/

最後附上一篇文章,講到.NET framework如何將Design pattern應用在其中:
http://msdn.microsoft.com/en-us/magazine/cc188707.aspx