#include<iostream>
#include<list>
#include<string>
class Employee {
private:
//职员名字
std::string name;
//所属部门
std::string dept;
//薪水
int salary;
//下属
std::list<Employee*> subordinates;
public:
Employee(std::string n, std::string d, int s) {
name = n;
dept = d;
salary = s;
}
//增加职员
void Add(Employee* e) {
subordinates.push_back(e);
}
//删除职员
void Remove(Employee* e) {
subordinates.remove(e);
}
//该职员下的所有下属
std::list<Employee*> GetSubordinates(){
return subordinates;
}
//序列化该职员所有信息
std::string ToString() {
return ("名字 :[ : " + name
+ ", 部门 : " + dept + ", 薪水 :"
+ std::to_string(salary) + " ]\n");
}
};
//递归遍历
void FindAllSubordinates(Employee* e) {
std::cout<<e->ToString();
if (e->GetSubordinates().size() == 0) return;
for (auto&& epy : e->GetSubordinates()) {
FindAllSubordinates(epy);
}
}
int main()
{
//公司老大
Employee* CEO = new Employee("本大帅", "CEO", 100000);
//总销售
Employee* headSales = new Employee("张三", "总销售", 50000);
//市场营销主管
Employee* headMarketing = new Employee("李四", "市场营销主管", 40000);
//职员1
Employee* clerk1 = new Employee("王五", "职员1", 10000);
//职员2
Employee* clerk2 = new Employee("二哈", "职员2", 10000);
//销售执行1
Employee* salesExecutive1 = new Employee("小曹子", "销售执行1", 5000);
//销售执行1
Employee* salesExecutive2 = new Employee("小陈子", "销售执行2", 5000);
//结构化部门体系
CEO->Add(headSales);
CEO->Add(headMarketing);
headSales->Add(salesExecutive1);
headSales->Add(salesExecutive2);
headMarketing->Add(clerk1);
headMarketing->Add(clerk2);
//查找所有员工并打印其信息
FindAllSubordinates(CEO);
system("pause");
return 0;
}
设计模式之组合模式
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 引入composite模式 composite模式的实例 composite模式的分析 小结 引入composit...
- 2.4.1 模式意图: 在处理树形结构数据时,通常必须区分叶节点和分支节点。这使代码更复杂,也更容易出错。组合模式...