《C#26设计模式》之合成模式
1、合成模式简介
合成模式是基于对象的模式,我们也可以理解成整体-部分模式,将对象组装到树结构,就可以用来描述整体和部分作用。
2、合成模式结构
从类图中可以看出合成模式涉及3个角色:
抽象构件角色(Component):这是一个抽象角色,他给参加组合的对象规定一个接口,这个角色给出共有的接口及其默认行为。
树叶构件角色(Leaf):代表参加组合的树叶对象。一个树叶没有下级的子对象。定义出参加原始对象的行为。
树枝构件角色(Composite):代表参加组合的有子对象的对象,并给出树枝构件对象的行为。
3、合成模式
安全和透明式的合成模式
透明方式:就是在Component里面声明所有的用来管理子对象的方法,包括add()、remove()以及getChild()方法,这样做的好处是所有的构件类都有相同的接口。在客户端看来,树叶类对象与合成类对象的区别起码在接口层次上消失了,客户端可以同等的对待所有的对象。这就是透明形式的合成模式。
这个选择的缺点是不够安全的,因为树叶类对象和合成类对象在本质上是有区别的,树叶类对象不可能有一层的对象,因此add()、remove()以及getChild()方法没有意义,但是在编译时期不会出错,而只会在运行时期才会出错。
安全方式:是在Composite类里面声明所有的用来管理子类对象的方法。这样的做法是安全的做法,因为树叶类型的对象根本就没有管理子对象的方法。因此,如果客户端对树叶对象使用这些方法时会在编译时期出错。编译不通过,就不会出现运行时出错。
4、合成模式的应用:
首先创建抽象构建
创建树叶构件源代码如下:
创建树枝构件源代码如下:
客户端源代码如下:
显示结果:
如需案例源码,请留言邮件地址!