设计模式C++实现:组合模式
·
组合模式(Composite Pattern)是部分-整体模式的一种特例,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
类图:
适用性 以下情况下适用Composite模式: 1.你想表示对象的部分-整体层次结构 2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
代码示例:
#include <iostream>
#include <list>
#include <string>
using namespace std;
class Company
{
public:
Company(string name):m_name(name)
{
}
virtual ~Company(){}
virtual void Add(Company *pCom){}
virtual void Remove(Company *pCom){}
virtual void Operation() { }
protected:
string m_name;
};
class CompanyA:public Company
{
public:
CompanyA(string name):Company(name)
{
}
virtual void Add(Company *pCom){m_listCompany.push_back(pCom);}
virtual void Remove(Company *pCom){m_listCompany.remove(pCom);}
virtual void Operation()
{
cout<<"name:"<<m_name<<endl;
for(list<Company *>::iterator iter=m_listCompany.begin();iter !=m_listCompany.end();iter++)
{
(*iter)->Operation();
}
}
private:
list<Company *> m_listCompany;
};
class HRDepartment:public Company
{
public:
HRDepartment(string name):Company(name)
{
}
void Operation()
{
cout<<"name:"<<m_name<<endl;
}
};
int main(void)
{
Company *root = new CompanyA("TotalComany");
Company *leaf1=new HRDepartment("TotalComanyHR");
root->Add(leaf1);
Company *mid1 = new CompanyA("ConcreteCompanyA");
Company *leaf2=new HRDepartment("ConcreteCompanyAHR");
mid1->Add(leaf2);
root->Add(mid1);
root->Operation();
return 0;
}
运行结果:
文章为原创,转载请表明出处:http://blog.csdn.net/renyican
更多推荐
所有评论(0)