《java与模式》学习系列——合成模式

 

合成(Composite)模式的结构图

合成模式是将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与符合元素同等看待。在如下情况下使用合成模式:

1、需要描述对象的部分和整体的等级结构2、需要客户端忽略掉个体构件和组合构件的区别。客户端必须平等对待所有的构件,包括个体构件和组合构件。

合成模式有两种形式,分别为安全式和透明式

透明式

Component里面声明所有的用来管理子类对象的方法,包括add()remove(),以及getChild()方法。这样做的好处是所有的构件类都有相同的接口。在客户端看来,树叶类对象与合成类对象的区别起码在接口层次上消失了,客户端可以同等的对待所有的对象。这就是透明形式的合成模式。其缺点是不够安全,因为树叶类对象和合成类对象在本质上是有区别的。树叶类对象不可能有下一个层次的对象,因此add()remove()以及getChild()方法没有意义。

 


安全式

在树枝结构Composite类里面声明所有的用来管理子类对象的方法。这样的做法是安全的。缺点是不够透明,因为树叶类和合成类将具有不同的接口。

二、合成模式在Java中的应用

由于AWTSwing的图形界面构件是建立在AWT库中的Container类和Component类上的,从下面的AWT合成模式类图可以看出,ButtonCheckbox是树叶型的构件,而Container则是树枝型的构件。如下图所示:

Container类中,有操作聚集的对应方法,而在Component类中则没有这样的方法。这就是说,AWT中使用的合成模式是安全形势的合成模式。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值