C++设计模式之组合模式(composite)(结构型)
对于树形结构,当容器对象(如文件夹)的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象(可以是容器对象,也可以是叶子对象,如子文件夹和文件)并调用执行。(递归调用) 由于容器对象和叶子对象在功能上的区别,在使用这些对象的客户端代码中必须有区别地对待容器对象和叶子对象,而实际上大多数情况下客户端希望一致地处理它们,因为对于这些对象的区别对待将会使得程序非常复杂。 组合模式描述了如何将容器对象和叶子对象进行递归组合,使得 用户在使用时无须对它们进行区分,可以一致地对待容器对象和叶子对象,这就是组合模式 的模式动机。 一、模式定义 组合模式(Composite Pattern):组合多个对象形成树形结构以表示“整体-部分”的结构层次。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性。 组合模式又可以称为“整体-部分”(Part-Whole)模式,属于对象的结构模式,它将对象组织到树结构中,可以用来描述整体与部分的关系。 组合模式的分类 1) 安全组合模式: 将管理子元素的方法定义在 Composite 类中。 2) 透明组合模式: 将管理子元素的方法定义在 Component 接口中,这样Leaf类就需要对这些方法空实现。 适用性 • 需要表示一个对象整体或部分层次,在具有整体和部分的层次结构中,希望 通过一种方式忽略整体与部分的差异