《java与模式》-12 合成模式

合成模式属于对象的结构模式;
使客户端将单纯元素与复合元素同等看待;
角色:抽象构件角色;树枝角色;树叶角色;
其中树枝角色可以有子节点,树叶角色不可以有子节点,如果根节点是树叶角色那么就变成了只有一个节点的树;
这里写图片描述
合成模式根据所实现的接口分为两种形式:安全式、透明式;
合成模式可以不提供父对象的管理方法,但是必须在合适的地方提供子对象的管理方法,如add(),remove(),getChild()等;

  1. 透明式:
    在 Component 中声明管理子类对象的方法,如add(),remove(),getChild()等,好处是所有的构件都有相同的接口,在客户端看来树叶类与树枝类没有区别可以同等对待所有对象这就是透明的合成模式,缺点是不够安全,因为树叶类与树枝类本质上是有区别的,树叶类对象不可能有下一个层次的对象,add(),remove(),getChild()编译器不会报错,而在运行时才会报错;
  2. 安全式:
    在Composite里声明所有用来管理子类的方法,这是安全的做法,因为树叶类型的对象根本没有管理子类型的方法,这个选择的缺点是不透明,因为树叶类和树枝类将有不同的接口;

这两种形式各有优缺点,根据实际情况使用;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值