我是靠谱客的博主 朴实宝贝,最近开发中收集的这篇文章主要介绍2_6 CompositeMode.cpp 组合模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

// 定义:将对象组合成树形结构以表示整体~部分的层次结构,
//     组合模式使得用户对单个对象和组合对象具有一致性
//
// 模式举例:总公司有财务部和技术员,分公司也有财务部和技术部
//        在总公司眼里分公司就是总公司的一个部门
//	
// 模式特点:设计模式里唯一把对象整理成树形的
//	
//

#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 组合模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部