文章出處
文章列表
何時能用到它?
組合模式又叫部分-整體模式,在樹型結構中,模糊了簡單元素和復雜元素的概念,客戶程序可以向處理簡單元素一樣來處理復雜元素,從而使得客戶程序與復雜元素的內部結構解耦。對于今天這個例子來說,它可以很清楚的說明組合模式的用意,首先是一個Graphics對象,它表示是一繪圖功能(樹根),而circle,line和rectangle分別是簡單的圖形,它們內部不能再有其它圖形了(相當于樹葉),而picture是一個復雜圖形,它由circle,line和rectangle組成(相當于樹枝),而它對外將這些子對象隱藏了,只對外公開了add和remove方法,用來向picture內部添加簡單對象。
組合模式的結構圖
組合模式實現說明
Graphics:圖像基類,所以和圖像有關的類都繼承它
Picture:照片,它由一些簡單圖形組成
Circle:簡單圖形-圓
Line:簡單圖形-線
Rectangle:簡單圖形-矩形
組合模式的C#實現
#region 組合模式 /// <summary> /// 圖像基類,所以和圖像有關的類都繼承它 /// </summary> public abstract class Graphics { protected string _name; public Graphics(string name) { this._name = name; } public abstract void Draw(); } /// <summary> /// 照片,它由一些簡單圖形組成 /// </summary> public class Picture : Graphics { protected ArrayList picList = new ArrayList(); public Picture(string name) : base(name) { } public override void Draw() { Console.WriteLine("Draw a" + _name.ToString()); foreach (Graphics g in picList) { g.Draw(); } } public void Add(Graphics g) { picList.Add(g); } public void Remove(Graphics g) { picList.Remove(g); } } /// <summary> /// 簡單圖形-線 /// </summary> public class Line : Graphics { public Line(string name) : base(name) { } public override void Draw() { Console.WriteLine("Draw a" + _name.ToString()); } } /// <summary> /// 簡單圖形-圓 /// </summary> public class Circle : Graphics { public Circle(string name) : base(name) { } public override void Draw() { Console.WriteLine("Draw a" + _name.ToString()); } } /// <summary> /// 簡單圖形-矩形 /// </summary> public class Rectangle : Graphics { public Rectangle(string name) : base(name) { } public override void Draw() { Console.WriteLine("Draw a" + _name.ToString()); } } #endregion
調用代碼
#region 組合模式調用 Picture root = new Picture("Root"); root.Add(new Line("Line")); root.Add(new Circle("Circle")); Rectangle r = new Rectangle("Rectangle"); root.Add(r); root.Draw(); #endregion
屏幕截圖
通過上面的圖我們可以發展,這個picture圖像,它由一條線,一個圓和一個矩形組成。
文章列表
全站熱搜