C++实现组合模式

本文介绍了组合模式的概念,通过公司人事架构的例子展示了如何利用这种模式建立部分-整体的层次结构。组合模式允许用户对单个对象和组合对象进行一致的操作,属于结构型设计模式。代码示例中展示了如何创建员工类及其子类,实现树形结构的组织,并演示了添加、删除员工以及展示信息的功能。

接下来4个模式是非常有趣的设计模式,同属于一个类型。

1. 情景与意图

  举几个显示生活中的例子。
  文件夹:没个文件夹都是具有相同属性的,但是文件夹又可以包含文件夹。每当我们打开文件夹的时候,可以一层一层二点打开。
  公司人事架构:公司的某个领导,既是更高层领导的下属,却又是级别较低员工的领导。
  在我们日常开发中,肯定也会遇到类似的情况。如何设计来达到这种数据结构呢?——组合模式。

2. 组合模式

  将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 ·  前面的例子可能还不够生动,我们直接上代码。

3. 公司人事架构

首先我们定义一下公司员工的属性。

class DPEmploye {
protected:
	std::string _dpName;
	std::string _dpDept;
	std::string _dpRank;
public:
	DPEmploye(const std::string& name, const std::string& dept, const std::string& rank);
	virtual void showMessage() = 0;
};

下面将员工的属性和行为进行扩展,当然也可以直接写在上面的类,都是可以的。

class DPBasicEmploye  : public DPEmploye {
	// 下属
	std::list<DPEmploye*> _employeList;
public:
	DPBasicEmploye (const std::string& name, const std::string& dept, const std::string& rank);
	void addSubordinate(DPEmploye& e);
	void employeeTurnover(DPEmploye& e);
	virtual void showMessage();
};

看一下具体的表现吧。

int main() {
	DPBasicEmploye jia(std::string("jia Smith"), std::string("RD department"), std::string("T3"));
	DPBasicEmploye yi(std::string("yi Jones"), std::string("RD department"), std::string("T3"));
	DPBasicEmploye bing(std::string("bing Williams"), std::string("Marketing Department"), std::string("T3"));
	DPBasicEmploye ding(std::string("ding Brown"), std::string("Marketing Department"), std::string("T3"));

	DPBasicEmploye wu(std::string("wu Johnson"), std::string("RD department"), std::string("T6"));
	wu.addSubordinate(jia);
	wu.addSubordinate(yi);
	DPBasicEmploye ji(std::string("ji Wilson"), std::string("Marketing Department"), std::string("T6"));
	ji.addSubordinate(bing);
	ji.addSubordinate(ding);
	DPBasicEmploye geng(std::string("geng Garcia"), std::string("CEO"), std::string("T10"));
	geng.addSubordinate(wu);
	geng.addSubordinate(ji);

	geng.showMessage();

	ji.employeeTurnover(ding);
	geng.showMessage();
	return 0;
}

4. 总结

  其实通过上面的代码可以很容易看到,组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
  当然在上面的代码中还可以加一个指针,只想父节点,也就是指向领导,方便回溯遍历。
C++实现组合模式代码:【组合模式C++源码】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值