裝飾模式

23種設計模式之一,英文叫Decorator Pattern,又叫裝飾者模式。裝飾模式是在不必改變原類文件和使用繼承的情況下,動態地擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。


class Program
    {
        static void Main(string[] args)
        {
            //首先用ConcreteComponent實例c,然後用ConcreteDecoratorA實例化對象d1來包裝c,再用ConcreteDecoratorB的對象d2包裝d1,最後執行d2的Operation()
            ConcreteComponent c = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();

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

            d2.Operation();

            Console.Read();
        }
    }

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

    class ConcreteComponent : Component
    {
        public override void Operation()
        {
            Console.WriteLine("具體對象的操作");
        }
    }

    abstract class Decorator : Component
    {
        protected Component component;

        //設置Component
        public void SetComponent(Component component)
        {
            this.component = component;
        }

        public override void Operation()
        {
            //重寫Operation(),實際執行的是component的Operation();
            if (component != null)
            {
                component.Operation();
            }
        }
    }

    class ConcreteDecoratorA : Decorator
    {
        //本類獨有的功能
        private string addedState;

        public override void Operation()
        {
            //首先運行原Component的Operation(),在執行本類的功能addedstate,相當於對原Component進行了修飾
            base.Operation();
            addedState = "New State";
            Console.WriteLine("具體裝飾對象A的操作");
        }
    }

    class ConcreteDecoratorB : Decorator
    {

        public override void Operation()
        {
            base.Operation();
            AddedBehavior();
            Console.WriteLine("具體裝飾對象B的操作");
        }

        private void AddedBehavior()
        {

        }
    }

代碼來源於《大話設計模式》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章