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

转载于:https://www.cnblogs.com/MikeYao/archive/2009/11/06/1597357.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值