组合模式

若要对一组对象统一处理,则组合模式非常适合。

 

首先,定义一个接口。

 

 1 /// <summary>
 2 /// 图形接口。
 3 /// </summary>
 4 public interface IShape
 5 {
 6     /// <summary>
 7     /// 画图。
 8     /// </summary>
 9     void Draw();
10 }

其次,这些对象从该接口派生。

 

 1 /// <summary>
 2 /// 圆形。
 3 /// </summary>
 4 public sealed class Circle : IShape
 5 {
 6     /// <summary>
 7     /// 画图。
 8     /// </summary>
 9     public void Draw()
10     {
11     }
12 }
13 
14 /// <summary>
15 /// 矩形。
16 /// </summary>
17 public sealed class Square : IShape
18 {
19     /// <summary>
20     /// 画图。
21     /// </summary>
22     public void Draw()
23     {
24     }
25 }

最后,再从该接口派生一个类,统一处理对象。

 

 1 /// <summary>
 2 /// 图形组合。
 3 /// </summary>
 4 public sealed class CompositeShape : IShape
 5 {
 6     private IList<IShape> _shapes = new List<IShape>();
 7 
 8     /// <summary>
 9     /// 添加一个图形。
10     /// </summary>
11     /// <param name="s">要添加的图形。</param>
12     public void Add(IShape s)
13     {
14         _shapes.Add(s);
15     }
16 
17     /// <summary>
18     /// 画图。
19     /// </summary>
20     public void Draw()
21     {
22         foreach (IShape s in _shapes)
23         {
24             s.Draw();
25         }
26     }
27 }

这样一来,想要添加新的对象,就十分简单,几乎不需要改动什么,直接从接口派生即可。

简单,优雅,大致如是。

原文地址:https://www.cnblogs.com/yyzj/p/6629168.html