[Design] Composite Pattern
结构模式
结构模式描述如何将类或者类的对象结合在一起形成更大的结构。
结构模式描述两种不同的东西:类与类的实例。结构模式可以分为:类的结构模式和对象的结构模式两种。
类的结构模式:类的结构模式使用继承来把类、接口等组合在一起,以形成更大的结构。类的结构模式是静态的,比如类形式的适配器模式。
对象的结构模式:对象的结构模式描述怎么样把不同类型的对象组合在一起,以实现新的功能的方法。对象的结构模式是动态的。比如代理人模式。
--------------------------------------------------------------------------------------
合成(Composite)模式
合成模式属于对象的结构模式,又叫部分-整体模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。可以使用客户端将单纯元素与复合元素同等看待。根据所实现接口的区别分为安全式和透明式的合成模式。
透明式的合成模式
透明式的合成模式抽象构件声明所有的用来管理子类对象的方法,使用客户对树叶类对象和合成类对象感觉没有区别,可以同等对待。缺点是树叶和树枝在本质是有区别的,有可能发生编译时期正常,但运行时期才会出错。
安全方式的合成模式
安全方式的合成模式在抽象树枝角色里声明所有的用来管理子类对象的方法,这样客户端如果使用枝叶来管理子对象程序在编译时就不会通过。不会出现运时期错误。缺点不够透明,树叶类和树枝类将具有不同的接口。
模式结构图及角色
1. 抽象构件角色
这是一个抽象角色,它给参加组合的对象规定一个接口。
2. 树叶构件角色
代表参加组合的树叶对象。一个树叶没有下级的子对象,定义出参加组合的原始对象的行为。
3. 树枝构件角色
代表参加组合的有子对象的对象,并给出树枝构件对象的行为。