設計模式-裝飾者模式(decorator pattern)
阿新 • • 發佈:2019-02-02
名稱:裝飾者模式
說說:哥哥吞併了弟弟後,獲得了弟弟的能力,本是同根生...
動機:
適用性:如功能擴充套件
參與者:
結果:動態地將責任附加到物件上,實現新的擴充套件
類圖:
說明:實際上是在執行時實現了繼承的功能(繼承兄弟而非父親,或者說吞併兄弟的屬性),繼承本身是在編譯時決定的
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"); } } }