我們通常可以使用繼承來實作功能的拓展,如果這些需要拓展的功能的種類很繁多,那麼勢必生成很多子類,增加系統的複雜性,同時,使用繼承實作功能拓展,我們必須可預見這些拓展功能,這些功能是編譯時就确定了,是靜态的。
動态地給一個對象添加一些額外的職責。就增加功能來說,Decorator模式相比生成子類更為靈活。

(一)代碼
public abstract class Component
{
public abstract void Do1();
public abstract void Do2();
}
public class ConcreteComponent : Component
public override void Do1()
{
Console.WriteLine("第一件事。");
}
public override void Do2()
Console.WriteLine("第二件事。");
public abstract class Decorator : Component
Component _component;
public Decorator(Component component)
_component = component;
_component.Do1();
_component.Do2();
public class ConcreteDecorator1 : Decorator
public ConcreteDecorator1(Component component):base(component)
{
base.Do1();
Console.WriteLine("聽着音樂!");
public class ConcreteDecorator2: Decorator
public ConcreteDecorator2(Component component)
: base(component)
Console.WriteLine("吃着零食!");
(二)測試
[Test]
public void TestDecorator()
Component c1 = new ConcreteComponent();
Decorator.Decorator d = new ConcreteDecorator1(c1);
d.Do1();
結果:
第一件事。聽着音樂!
部落格園大道至簡
<a href="http://www.cnblogs.com/jams742003/" target="_blank">http://www.cnblogs.com/jams742003/</a>
轉載請注明:部落格園