文章目录
前言
今天复习了组合模式,实现了对象间树形结构关系,这里给大家分享下。
1. 组合模式理解
组合模式,顾名思义,通过组合关系定义类间的关联关系,实现了将对象组合成树形结构,最终实现类的复用。可能是由于设计模式看的多了,初看组合模式的类图,感觉和装饰者模式类图很相似,都是使用继承和组合关系,当然,也只是结构相似而已。
组合模式正规定义与类图(引用《大话设计模式》)如下所示:
2. 组合模式C++实现
这里以公司在不同地区有分部,不同城市有不同办事处,不论总公司、分公司还是办事处都有财务部、人力资源部为例,实现组合模式。
上述例子的组合模式的类图(引用《大话设计模式》)如下所示:
#include <iostream>
#include <memory>
#include <list>
//******************Composite Pattern******************
//公司抽象类
class Company
{
protected:
std::string name;
public:
Company(const std::string& strName): name(strName){
}
virtual void Add(std::shared_ptr<Company> c) = 0;
virtual void Remove(std::shared_ptr<Company> c) = 0;
virtual void Display(int depth) = 0;
virtual void LineOfDuty() = 0;
};
//具体公司类 - 非叶子节点
class ConcreteCompany : public Company
{
private:
std::list<std::shared_ptr<Company