组合模式:
将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。
意图:
解决整合与部分可以被一致对待问题。
角色及其职责:
Component类:组合中的对象声明接口,在适当情况下,实现所有类共有接口的行为。声明一个接口用于访问和管理Component的子部件。
Leaf类:叶节点对象,叶节点没有子节点。由于叶节点不能增加分支和树叶,所以叶节点的Add和Remove没有实际意义。
有叶节点行为,用来存储叶节点集合
Composite类:实现Componet的相关操作,比如Add和Remove操作。
适用性:
以下情况下适用Composite模式:
1.你想表示对象的部分-整体层次结构
2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
典型实例
一个公司的组织结构:
示例代码
// 组合模式
class CCombination
{
public:
CCombination(void);
~CCombination(void);
virtual void display() = 0;
virtual void add(CCombination* ins) = 0;
virtual void remove(CCombination* del) = 0;
char* m_sName;
};
class leaf:public CCombination
{
public:
leaf(){}
~leaf(){}
void display()
{
cout<<m_sName<<endl;
}
};
class Composite:public CCombination
{
public:
Composite(){}
~Composite(){}
virtual void display()
{
cout << m_sName << endl;
}
virtual void add(CCombination* ins)
{
vecCombination.push_back(ins);
}
virtual void remove(CCombination* del)
{
vecCombination.clear();
}
private:
std::vector<CCombination*> vecCombination;
};