zoukankan      html  css  js  c++  java
  • Composite模式

    Composite模式体现部分与整体的关系,形象的比喻就如树形图。树中有根节点、枝节点(可以包含子节点)、叶节点(无子节点)。

    Composite模式有两种方式:

    1.透明方式,就是在根节点中声明所有用来管理子节点的方法,比如Add、Remove等。这样对于叶节点来说,会产生一些无意义的代码重写。

    2.安全方式,只在枝节点中声明管理子节点的方法。但是,当出现某些三层继承时,会有些麻烦。比如,根节点A包含Add、Remove方法;枝节点B继承A,不需要Add、Remove方法,重写为空;C继承B,需要Add、Remove方法,又重写A的方法,这样就会造成重复的代码。参看.Net Framework中Control、HtmlControl、HtmlContainerControl的实现,它很巧妙地增加了一个类ControlCollection作为聚合处理,Add、Remove等方法都移到ControlCollection类中,不论是枝节点还是叶节点,只要对根节点的Controls属性进行重写,就能给自己定位为枝节点或叶节点,同时通过EmptyControlCollection类保障了控件的安全。

    这个模式中,还学到面向对象设计中的【开放-封闭原则】(Open-Closed Principle),即对扩展是开放的,对更改则是封闭的。

  • 相关阅读:
    Echarts Jqplot嵌extjs4 windows 装配方法
    法学类人猿生存方案--升华成掌握可能的方式
    LeetCode Merge k Sorted Lists 解决报告
    Swift
    Swift
    Swift
    Swift
    Swift
    Swift
    Swift
  • 原文地址:https://www.cnblogs.com/MikeYao/p/1597357.html
Copyright © 2011-2022 走看看