组合模式--Composite
来源:互联网 发布:mac docker 仓库地址 编辑:程序博客网 时间:2024/04/30 16:59
假设有一个公司,下面有直属人事部,直属餐饮部,和一个子公司,但是子公司也有自己的直属人事部,直属餐饮部。要清楚的是子公司包括其直属子部门在一起也属于总公司的一个部门。即:子公司也是一种部门。
#include <iostream>#include <vector>#include <string>#include <iterator>using namespace std;//公司基类class Company{public:Company(){}Company(string s):companyName(s){}virtual ~Company(){}virtual void show(int depth)=0;virtual void add(Company*){};protected:string companyName;};class ConcreteCompany:public Company{public:ConcreteCompany(string s):Company(s){}virtual void add(Company *com){vec_com.push_back(com);}virtual void show(int depth){for(int i=0;i<depth;i++)cout<<"-";cout<<companyName<<endl;for(vector<Company*>::iterator iter=vec_com.begin();iter!=vec_com.end();iter++){(*iter)->show(depth+2);}}private:vector<Company*> vec_com;};//餐饮部门class FoodCompany:public Company{public:FoodCompany(string s):Company(s){}void show(int depth){for(int i=0;i<depth;i++)cout<<"-";cout<<companyName<<endl;}};//人事部门class HrCompany:public Company{public:HrCompany(string s):Company(s){}void show(int depth){for(int i=0;i<depth;i++)cout<<"-";cout<<companyName<<endl;}};int main(){Company *root=new ConcreteCompany("总公司");Company *food=new FoodCompany("总公司餐饮部");Company *hr=new HrCompany("总公司人事部");root->add(food);root->add(hr);Company *subRoot1=new ConcreteCompany("分公司1");Company *sub1food=new FoodCompany("分公司1餐饮部");Company *sub1hr=new HrCompany("分公司1人事部");subRoot1->add(sub1food);subRoot1->add(sub1hr);Company *subRoot2=new ConcreteCompany("分公司2");Company *sub2food=new FoodCompany("分公司2餐饮部");Company *sub2hr=new HrCompany("分公司2人事部");subRoot2->add(sub2food);subRoot2->add(sub2hr);root->add(subRoot1);root->add(subRoot2);root->show(0);}
- Composite模式 组合模式
- 组合模式:Composite模式
- 组合模式(Composite)
- Composite组合模式
- 组合模式-Composite Pattern
- Composite 组合模式
- Composite Pattern(组合模式)
- 组合模式(Composite)
- Composite组合模式
- 组合模式(Composite)
- 组合模式Composite
- Composite 组合模式
- Composite(组合模式)
- java Composite 组合模式
- Composite 组合模式
- 组合模式(Composite Patten)
- Composite(组合模式)
- 11.组合模式--Composite
- 字符串处理 删除指定字符
- Ubuntu 10.04 Gedit 打开txt文件乱码问题
- Hibernate get和load区别
- 防CRLF log 注入
- poj_1125_Stockbroker Grapevine
- 组合模式--Composite
- ArcGIS JavaScript API开发的地图—重新布局
- 句柄和指针的区别和联系是什么?[英国某著名计算机图形图像公司面试题]
- C++ 二维数组与元素为指针的数组
- 2012,当我们谈论移动互联网创业时,我们在谈论些什么?
- 程序员如何保持优秀 转
- Oracle latch:library cache 导致 数据库挂起 故障
- Expression Blend实例中文教程系列文章汇总
- 在windows 7 上为 sqlserver 2008 启用远程访问