設計模式之裝飾模式

裝飾模式的定義:

是允許向一個現有的對象添加新的功能,同時又不改變其結構。裝飾模式在設計模式中屬於結構型模式,它是作爲現有類的一個包裝。

主要意圖:動態的給一個對象添加一些額外的職責 (就增加功能來說,裝飾器模式相比生成自雷更爲靈活)。

使用場景:在不想增加很多子類的情況下擴展類(1,擴展一個類的功能。2,動態增加功能,動態撤銷。)。

優點:裝飾類和被裝飾類可以獨立發展,耦合度低,裝飾模式是繼承的一個替代模式,裝飾模式可以動態擴展一個實現類的功能。

缺點:多層裝飾比較麻煩 

在某種意義上是可以代替繼承使用。

首先我們來看一下它的類圖:

接下來是代碼:

using System;

namespace _03裝飾模式_演示
{
    class Program
    {
        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();

            Console.Read();

        }
    }
    abstract class Componet
    {
        public abstract void Operation();
    }
    class ConcreteComponent:Componet
    {
        public override void Operation()
        {
            Console.WriteLine("具體對象的操作");
        }
    }
    abstract class Decorator:Componet
    {
        protected Componet componet;
        public void SetComponent(Componet componet)
        {
            this.componet = componet;

        }
        public override void Operation()
        {
            if(componet != null)
            {
                componet.Operation();

            }
        }
    }
    class ConcreteDecoratorA:Decorator
    {
        private string addedState;
        public override void Operation()
        {
            base.Operation();
            addedState = "New State";
            Console.WriteLine("具體裝飾對象A的操作");
        }
    }
    class ConcreteDecoratorB:Decorator
    {
        public override void Operation()
        {
            base.Operation();
            AddedBehavior();
            Console.WriteLine("具體張氏對象B的操作");
        }
        private void AddedBehavior()
        {

        }
    }
}

 

發佈了50 篇原創文章 · 獲贊 0 · 訪問量 2644
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章