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),即对扩展是开放的,对更改则是封闭的。

  • 相关阅读:
    Linux注意到Makefile
    coco2dx c++ HTTP实现
    怎么样putty打开图形化管理工具,在终端上
    javabean总结
    发布Ubuntu/Linux系统cache,增加可用内存空间
    Java获得正则表达式
    uva 11992 为矩阵更新查询段树
    oracle在schema是什么意思?
    zoj 3288 Domination (可能dp)
    学习算法
  • 原文地址:https://www.cnblogs.com/MikeYao/p/1597357.html
Copyright © 2011-2022 走看看