c++设计模式之组合模式
来源:互联网 发布:搜狐产品技术部 java 编辑:程序博客网 时间:2024/05/18 23:26
/************************************************************************//* 组合模式 *//************************************************************************//*假如我们先公司现在的结构如下, 结构图: -北京市总公司 ---总公司人力资源部 ---总公司财务部 ---青岛市分公司 -----青岛市分公司人力资源部 -----青岛市分公司财务部 -----城阳区办事处 -------城阳区办事处人力资源部 -------城阳区办事处财务部 -----崂山区办事处 -------崂山区办事处人力资源部 -------崂山区办事处财务部*/#include <IOSTREAM>#include <LIST>using namespace std;/*公司类抽象*/class Company{protected:char *name;public:Company(char *name){this->name = name;}virtual void Add(Company *c) {}//增加virtual void Remove(Company *c) {}//移除virtual void Display(int depth) {}//显示virtual void LineOfDuty() {}//履行职责};//具体的公司类(树枝)class ConcreteCompany : public Company{private:list<Company*> *child; public:ConcreteCompany(char *name):Company(name){child = new list<Company*>;}void Add(Company *c){child->push_back(c);}void Remove(Company *c){child->pop_back();}void Display(int depth){int temp = depth;list<Company*>::iterator it = child->begin();while(temp--)cout<<"-";cout<<name<<endl;//显示所有的分支和叶子的名称for(;it!=child->end();it++){(*it)->Display(depth+2);}}//履行职责void LineOfDuty(){list<Company*>::iterator it = child->begin();//显示所有的分支和叶子的名称for(;it!=child->end();it++){//执行分支或叶子的职责(*it)->LineOfDuty();}}};//人力资源部(叶子),叶子中的添加删除函数都是空实现class HRDepartment : public Company{public:HRDepartment(char *name):Company(name){}public:void Add(Company c){}void Remove(Company c){}void Display(int depth){int temp = depth;while(temp--)cout<<"-";cout<<name<<endl;}void LineOfDuty(){cout<<name<<" 员工招聘培训管理"<<endl;}};//财务部class FinanceDeparment : public Company{public:FinanceDeparment(char *name):Company(name){}void Add(Company *c){}void Remove(Company *c){}void Display(int depth){int temp = depth;while(temp--)cout<<"-";cout<<name<<endl;}void LineOfDuty(){cout<<name<<" 公司财务收支管理"<<endl;}};//客户端调用void main(){ConcreteCompany *root = new ConcreteCompany("北京市总公司");root->Add(new HRDepartment("总公司人力资源部"));root->Add(new FinanceDeparment("总公司财务部"));ConcreteCompany *comp = new ConcreteCompany("青岛市分公司");comp->Add(new HRDepartment("青岛市分公司人力资源部"));comp->Add(new FinanceDeparment("青岛市分公司财务部"));root->Add(comp);ConcreteCompany *comp1 = new ConcreteCompany("城阳区办事处");comp1->Add(new HRDepartment("城阳区办事处人力资源部"));comp1->Add(new FinanceDeparment("城阳区办事处财务部"));comp->Add(comp1);//城阳区办事处隶属于青岛市分公司ConcreteCompany *comp2 = new ConcreteCompany("崂山区办事处");comp2->Add(new HRDepartment("崂山区办事处人力资源部"));comp2->Add(new FinanceDeparment("崂山区办事处财务部"));comp->Add(comp2);//城阳区办事处隶属于青岛市分公司cout<<"结构图:"<<endl;root->Display(1);cout<<endl;cout<<endl;cout<<"职责是:"<<endl;root->LineOfDuty();}/*实例应用,如果这家公司让我们为他的不同等级的部门和各公司分别做一套软件而且(假如)上级需要包含下级所具备的功能,那么我们就可以使用组合模式,使用这种模式就大大简化了工作*/
- C#--设计模式之组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之--组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之---组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之-------------组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式 之 组合模式
- 设计模式之组合模式
- xrdp 访问ubuntu 界面只有背景无任何菜单问题解决
- 参照openRTSP写的一个RTSP client 加了一些注解
- 生产者消费者问题
- 数据库设计 Step by Step (3)
- 开始学习linux内核(抱着兴趣的态度)
- c++设计模式之组合模式
- http://www.blogjava.net/TiGERTiAN/archive/2011/02/22/344869.html
- linux面试题参考答案
- 选择公司的智慧
- ASP.NET生成WORD文档服务器部署注意事项
- 汉字首写字母获取算法
- Linux多线程函数解析
- 数据库设计 Step by Step (4)
- C语言面试小题展博