zoukankan      html  css  js  c++  java
  • 组合模式

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

     

    首先,定义一个接口。

     

     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 }

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

    简单,优雅,大致如是。

  • 相关阅读:
    MyEclipse 工具优化和初始化设置
    ubuntu添加软件源
    C/C++数组名与指针区别深入探索
    为什么不常见include .c文件
    [置顶] Linux学习笔记(完整版)
    linux .deb文件安装
    我们就是查拉图斯特拉所说最后的人?!
    关于Mina
    讨厌SVN
    关于对Mina的一些看法
  • 原文地址:https://www.cnblogs.com/yyzj/p/6629168.html
Copyright © 2011-2022 走看看