1. 程式人生 > >設計模式-裝飾者模式(decorator pattern)

設計模式-裝飾者模式(decorator pattern)

名稱:裝飾者模式

說說:哥哥吞併了弟弟後,獲得了弟弟的能力,本是同根生...

動機:

適用性:如功能擴充套件

參與者:

結果:動態地將責任附加到物件上,實現新的擴充套件

類圖:


說明:實際上是在執行時實現了繼承的功能(繼承兄弟而非父親,或者說吞併兄弟的屬性),繼承本身是在編譯時決定的

demo c#:

namespace decoratorPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            iOperation _man = new man();
            _man.display();

            _man = new decorator_shoes(_man);
            _man.display();

            _man = new decorator_rocket(_man);
            _man = new decorator_gun(_man);
            _man.display();

            Console.Read();
        }
    }
    // main code
    interface iOperation {
        void display();
    }
    class man : iOperation {    // 被裝飾者
        public void display(){
            Console.WriteLine("i am a man");
        }
    }
    class decorator_shoes : iOperation {    // 裝飾者 鞋,即man的擴充套件模組
        iOperation obj;
        public decorator_shoes(iOperation o){
            this.obj = o;
        }
        public void display(){
            this.obj.display();
            Console.WriteLine("shoes loaded, i can move");
        }
    }
    class decorator_rocket : iOperation{    // 裝飾者 火箭
        iOperation obj;
        public decorator_rocket(iOperation o){
            this.obj = o;
        }
        public void display(){
            this.obj.display();
            Console.WriteLine("rocket loaded, i can fly");
        }
    }
    class decorator_gun : iOperation{       // 裝飾者 槍
        iOperation obj;
        public decorator_gun(iOperation o){
            this.obj = o;
        }
        public void display(){
            this.obj.display();
            Console.WriteLine("gun loaded, i can fire");
        }
    }
}