Friday, June 7, 2013

Decorator: Allows an objects behavior to be altered at runtime.

class Program
    {
        static void Main(string[] args)
        {
            ConcreteComponent c = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecorationB d2 = new ConcreteDecorationB();

            d1.SetComponent(c);
            d2.SetComponent(d1);

            d2.Operation();
            Console.ReadKey();
        }
    }

    //abstract classes
    abstract class Component
    {
        public abstract void Operation();
    }

    abstract class Decorator : Component
    {
        protected Component component;
        public void SetComponent(Component component)
        {
            this.component = component;
        }
        public override void Operation()
        {
            if (component != null)
                component.Operation();
        }
    }

    //==================================
    class ConcreteComponent : Component
    {
        public override void Operation()
        {
            Console.WriteLine("ConcreteComponent.Operation");
        }
    }
    class ConcreteDecoratorA : Decorator
    {
        public override void Operation()
        {
            base.Operation();
            Console.WriteLine("ConcreteDecoratorA.Operation()");
        }
    }

    class ConcreteDecorationB : Decorator
    {
        public override void Operation()
        {
            base.Operation();
            AddedBehavior();
            Console.WriteLine("ConcreteDecoratorB.Operation()");
        }
        void AddedBehavior()
        { }
    }

    //==================================

No comments:

Post a Comment