2012年3月16日星期五

Decorator Pattern

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 类图

QQ截图20120316143512

    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);        }    }

Decorator Pattern

TAG: