组合模式
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。
实现方法
声明普通的item类和可以包含多个item的类。
#include <vector>
using namespace std;
class Item { //普通的item
public:
Item() {}
};
class Container : public Item { //可以包含item的item
public:
Container() : Item() {}
void addItem(Item *item) {
items.push_back(item);
}
private:
vector<Item*> items;
};
使用
Container *parentContainer = new Container();
Container *childContainer = new Container();
Item *item1 = new Item();
Item *item2 = new Item();
Item *item3 = new Item();
Item *item4 = new Item();
parentContainer->addItem(item1);
parentContainer->addItem(item2);
parentContainer->addItem(childContainer);
childContainer->addItem(item3);
childContainer->addItem(item4);
得到如下图所示的一棵item树
总结
组合模式的优点:
1: 基本对象和组合对象层次分明;
2: 调用简单,可以用同样的方法的使用基本对象和组合对象。
3: 容易增加新类型的组件。
组合模式的缺点:
1:使得设计更加复杂。