一、原理讲解
1.1意图
将对象组合成树形结构以表示“部分 — 整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。
1.2应用场景
- 你想表示对象的部分 — 整体层次结构;
- 你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象;
1.3结构图(UML图)
1.4代码实现步骤
a1 定义组件类Compoment,定义四个接口函数add()、remove()、findChild()、operation();
a2 定义一个叶节点类Leaf,定义重写操作函数operation();
a3 定义一个子节点枝类重写基类四个接口函数add()、remove()、findChild()、operation();
二、实现代码
CompositePattern.cpp
#include <iostream>
#include <string>
#include <vector>
using namespace std;
#define DELETE(pointer) delete (pointer); (pointer)=nullptr
class Compoment
{
public:
virtual ~Compoment() {
cout << "~Compoment()" << endl; }
virtual void operation() = 0;
virtual void add(Compoment *com){
}
virtual void remove(Compoment *com){
}
virtual Compoment* findChild(int index) {
return nullptr; }
};
class Leaf : public Compoment
{
int num;
public: