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 }

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

    简单,优雅,大致如是。

  • 相关阅读:
    为什么说 Java 程序员必须掌握 Spring Boot ?(转)
    Vert.x 之 HelloWorld
    Vert.x Web 文档手册
    Vert.x Core 文档手册
    Android数据存储五种方式总结
    设置简单的定时
    自定义dialog
    Android DrawerLayout 高仿QQ5.2双向侧滑菜单
    Fragments碎片
    理解Fragment生命周期
  • 原文地址:https://www.cnblogs.com/yyzj/p/6629168.html
Copyright © 2011-2022 走看看