组合模式
若要对一组对象统一处理,则组合模式非常适合。
首先,定义一个接口。
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 }
这样一来,想要添加新的对象,就十分简单,几乎不需要改动什么,直接从接口派生即可。
简单,优雅,大致如是。