概述
// 定义:将对象组合成树形结构以表示整体~部分的层次结构,
// 组合模式使得用户对单个对象和组合对象具有一致性
//
// 模式举例:总公司有财务部和技术员,分公司也有财务部和技术部
// 在总公司眼里分公司就是总公司的一个部门
//
// 模式特点:设计模式里唯一把对象整理成树形的
//
//
#include<iostream>
#include<string>
#include<vector>
using namespace std;
//add的参数是string类型的还是Component类型的?
class Component
{
public:
Component(string name):m_name(name){}
virtual void add(Component *pComponent)=0;
virtual void del(Component *pComponent)=0;
virtual void showInfo()=0;
protected:
string m_name;
};
class Leaf : public Component
{
public:
Leaf(string name):Component(name){}
virtual void add(Component *pComponent)
{
cout <<"leaf can not add child";
}
virtual void del(Component *pComponent)
{
cout <<"leaf can not del child";
}
virtual void showInfo()
{
cout <<"leaf node -- "<<m_name<<endl;
}
};
class Composite : public Component
{
public:
Composite(string name):Component(name){}
virtual void add(Component *pComponent)
{
m_children.push_back(pComponent);
}
virtual void del(Component *pComponent)
{
for(vector<Component*>::iterator iter=m_children.begin();iter!=m_children.end();iter++)
{
if(*iter == pComponent)
{
m_children.erase(iter);
break;
}
}
}
virtual void showInfo()
{
cout <<"composite node -- "<<m_name<<endl;
for(auto iter=m_children.begin();iter!=m_children.end();iter++)
{
Composite *pComposite = dynamic_cast<Composite*>(*iter);
Leaf *pLeaf = dynamic_cast<Leaf*>(*iter);
if(pComposite != NULL)
{
pComposite->showInfo();
}
else if(pLeaf != NULL)
{
pLeaf->showInfo();
}
}
}
private:
vector<Component*> m_children;
};
int main()
{
Composite * pZongGongSi = new Composite("总公司");
Leaf * pZGSCaiWuBu = new Leaf("总公司财务部");
pZongGongSi->add(pZGSCaiWuBu);
Leaf * pZGSJiShuBu = new Leaf("总公司技术部");
pZongGongSi->add(pZGSJiShuBu);
Composite * pFenGongSi = new Composite("分公司");
Leaf * pFGSCaiWuBu = new Leaf("分公司财务部");
pFenGongSi->add(pFGSCaiWuBu);
Leaf * pFGSJiShuBu = new Leaf("分公司技术部");
pFenGongSi->add(pFGSJiShuBu);
pZongGongSi->add(pFenGongSi);
pZongGongSi->showInfo();
return 0;
}
最后
以上就是朴实宝贝为你收集整理的2_6 CompositeMode.cpp 组合模式的全部内容,希望文章能够帮你解决2_6 CompositeMode.cpp 组合模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复