說明:
將一個物件的具體行為(實作)抽出來,成為一個獨立的物件。
也就是原本的一個物件,變成兩個物件:「抽像物件」+「實作物件」。
優點是抽像物件與實作物件可以解耦合,各自獨立變化。
範例:
一個圓形的類別,可以指定使用不同的畫圖物件,來畫出圓形。
希望達成如下的效果
static void Main(string[] args) { // 新增兩個圓形物件,分別指定不同畫圖物件 Circle a = new Circle(new DrawCircle_A()); Circle b = new Circle(new DrawCircle_B()); // 分別畫出圓形 a.Draw(); b.Draw(); Console.Read(); }執行結果:
第 1 種畫圓形方法 第 2 種畫圓形方法
實現重點在於,畫圖的實作物件,是分離出來,再另外指定的。
其餘程式碼
// "形狀"的抽象類別 abstract class Shape { protected DrawImplementor drawImplementor; protected Shape(DrawImplementor drawImplementor) { this.drawImplementor = drawImplementor; } public abstract void Draw(); } // "圓形"類別 (抽象物件) class Circle : Shape { public Circle(DrawImplementor drawImplementor) : base(drawImplementor) { } public override void Draw() { drawImplementor.DrawCircle(); // 讓實作物件畫圖形 } } // 畫圖形的實作介面 interface DrawImplementor { void DrawCircle(); } // 第1種畫圓形的類別 (實作物件)) class DrawCircle_A : DrawImplementor { public void DrawCircle() { Console.WriteLine("第 1 種畫圓形方法"); } } // 第2種畫圓形的類別 (實作物件)) class DrawCircle_B : DrawImplementor { public void DrawCircle() { Console.WriteLine("第 2 種畫圓形方法"); } }
相關連結:設計模式整理列表
沒有留言:
張貼留言