
模式名称: 组合模式类型: 结构型问题-使用场景: 可用于构建对象树这样的部分-整体层次结构,使用户对单个对象和组合对象的使用具有一致性解决方案: 使用递归组合的方式构建类效果: 使用户对单个对象和组合对象的使用具有一致性
样例引入如下图,有过QT开发经验的朋友能够看出来,这是QT组件管理里的对象树,它是一种管理组件的数据结构,同时它也很好地体现了组合模式在实际应用中的作用。
实现方式我们可以通过继承和聚合配合使用的方式实现组合模式,就以模拟实现上图的QWidget为例,我们来设计一个自己SWidget使之能够达到类似的效果
我们设计的类图如下
可以看到,在类图中,SObject和SWidget既是继承关系,又有组合关系,这一结构特点使SWidget之间能够构成对象树,而SLabel也是SObject的子类,但由于没有聚合关系,所以SLabel在对象树中仅能作为”叶子节点”存在。
代码实现如下,我们成功构建了一颗三层的对象树。
1234567891011121314151617181920212223242526272829303132333435363738394041424 ...