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

来源:互联网 发布:mac开机密码 编辑:程序博客网 时间:2024/06/01 23:31

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

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

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

原创粉丝点击