Design pattern IV - Decorator/Wrapper pattern
Decorators provide a flexible alternative to subclassing for extending functionality.
public class DecoratorPattern
{
        /*
        * decorator和wrapper是一个设计模式
        * 用途:用来扩展已有类的功能
        * 实现步骤:
        * 先定义一个interface,然后建立一个类继承这个接口,并实现接口里的方法
        * 建立一个包装类继承同一个接口,并在这个包装类的构造器中使用接口的实例做参数。
        * 建立实际包装类继承包装类,重写接口定义的方法,并可以创建自己特有的方法。
        */
    public interface IComponent
    {
        void Operation();
    }
    public class ConcreteComponent : IComponent
    {
        public void Operation()
        {
            Console.WriteLine("ConcreteComponent operation");
        }
    }
    public class Decorator : IComponent
    {
        private readonly IComponent _decoratedComponent;
        public Decorator(IComponent iComponent)
        {
            _decoratedComponent = iComponent;
        }
        public void Operation()
        {
            _decoratedComponent.Operation();
        }
    }
    public class ConcreteDecoratorA : Decorator
    {
        private string _addState;
        public ConcreteDecoratorA(Decorator decorator)
            : base(decorator)
        {
        }
        public new void Operation()
        {
            base.Operation();
            _addState = "New State";
            Console.WriteLine("ConcreteDecoratorA.Operation");
        }
        public void CustomOperation()
        {
            Console.WriteLine("ConcreteDecoratorA custom Operation");
        }
    }
    public static void Main()
    {
        ConcreteComponent concreteComponent = new ConcreteComponent();
        concreteComponent.Operation();
        Decorator decorator = new Decorator(concreteComponent);
        ConcreteDecoratorA concreteDecoratorA = new ConcreteDecoratorA(decorator);
        concreteDecoratorA.Operation();
        concreteDecoratorA.CustomOperation();
        Console.ReadKey();
    }
}
