【設計模式之裝飾模式】

我是太陽啦啦啦發表於2016-03-06

前言:

裝飾模式,屬於二十三個設計模式中之一,那麼,什麼是裝飾模式,下面,大家請跟著我一起走進裝飾模式,來看看裝飾模式:

核心:

(一)、結構圖

想知道設計模式嗎?那麼看了它的UML圖,你就一目瞭然了!

(二)基本程式碼

Component類
 abstract class Component
        {
            public abstract void Operation();
        }
ConcreteComponent類
 class ConcreteComponent:Component
    {
        public override void Operation()
        {
            Console.WriteLine("具體物件的操作");
        }
    }
Decorato類
abstract class Decorator : Component
    {
        protected Component component;
        public void SetComponent(Component component)
        {
            this.component = component;
        }
        public override void Operation()
        {
            if (component != null)
            {
                component.Operation();
            }
        }
    }
ConcreteDecoratorA類
 class ConcreteDecoratorA : Decorator 
            {
                private string addedState;
                public override void Operation()
                {
                    base .Operation();
                    addedState="New State";
                    Console.WriteLine("具體操作物件A的操作");
                }
            }
ConcreteDecoratorB類
 class ConcreteDecoratorB : Decorator
            {
                public override void Operation()
                {
                    base .Operation();
                    AddedBehavior();
                    Console .WriteLine ("具體操作物件B的操作");
                }
                public void AddedBehavior()
                {

                }
            }
客戶端程式碼
 static void Main(string[] args)
        {
            ConcreteComponent c = new ConcreteComponent();
            ConcreteDecoratorA d1 = new ConcreteDecoratorA ();
            ConcreteDecoratorB d2 = new ConcreteDecoratorB();


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

        }

(三)注意


學習設計模式要善於變通,如果只有一個ConcreteComponent類而沒有抽象的Component類,那麼Decorator類可以是ConcreteComponent的一個子類,同樣道理,如果只有一個ConcreteDecorator類,那麼就沒有必要建立一個單獨的Decoratorl類,而可以把Decorato和ConcreteDecorator的責任合併成一個類。

eg.人靠衣服來打扮


(四)、定義

動態的給物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更加靈活。
我們可以通過記住穿衣服打扮自己的例子來理解這個裝飾模式,裝飾自己,就像新增一些額外的功能一樣,這樣有利於我們的記憶!

(五)、歸類

隸屬於建立型模式

(六)、優點

簡化原有的類,將核心職責和裝飾功能分開

總結:

裝飾模式,更好的在程式碼中實現,加以體會。要 當心的是,裝飾模式雖然不錯,但是我們在用它的時候,要注意裝飾的順序。

相關文章