Decorator Pattern屬於Structural Patterns
介紹:
Decorator pattern的作用是提供一種方式動態給一個對象添加新的職責或狀態,被裝飾的對象並不知道被“裝飾”了。A key implementation point in the Decorator pattern is that decorators both inherit the original class and contain an instantiation of it.
實現:
UML 類圖
public interface IComponent { string Operation(); } /// <summary> /// 被裝飾者 /// </summary> public class Component : IComponent { #region IComponent Members public string Operation() { return "I'm a photo;"; } #endregion } /// <summary> /// 裝飾者A /// </summary> public class DecoratorA : IComponent { IComponent component; public DecoratorA(IComponent component) { this.component = component; } #region IComponent Members public string Operation() { return component.Operation() + "and decorated by DecoratorA"; } #endregion } /// <summary> /// 裝飾者B /// </summary> public class DecoratorB : IComponent { IComponent component; public string AddedState = " and added state"; public DecoratorB(IComponent component) { this.component = component; } #region IComponent Members public string Operation() { return component.Operation() + "and decorated by DecoratorB"; } public string AddedBehavior() { return " and added behavior by DecoratorB"; } #endregion } public class Client { public static void Display(string s, IComponent component) { Console.WriteLine(s + component.Operation()); } } [TestFixture] public class DecoratorTest { [Test] public void T1() { var component = new Component(); Client.Display(string.Empty, component); var decoratorB = new DecoratorB(component); Client.Display("hello!", decoratorB); } }