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 }

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

    简单,优雅,大致如是。

  • 相关阅读:
    UE4物理笔记
    lambda+mutable配合move实现单函数多程序域
    UE导航系统详
    cpp智能指针
    [转载]新手应该如何学习网站分析
    webpack 单独打包指定JS文件
    vue-cli axios ie9 问题
    [分享] 通过修改CSS自定义chrome滚动条样式
    日期格式化转换方法
    vue 路劲
  • 原文地址:https://www.cnblogs.com/yyzj/p/6629168.html
Copyright © 2011-2022 走看看