1.组合模式简介
- 英文名称
Composite - 主要目的
该模式将对象组合成树形结构已表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 - 使用场景
1.当你想表示对象的部分-整体层次结构时;
2.你希望用户忽略组合对象与单个对象的不同时,用户将统一地使用组合结构中的所有对象。
2.组合模式代码示例
- 测试平台
1.开发语言:C++
2.开发工具:VS2015
3.操作系统:Win7 X64 代码说明
本例用组合实现如下图所示的公司架构图。
1.Company–抽象公司类,该类提供具体的抽象接口;
2.CompositeCompany–具体部门类,该类表示那些可以包含子部门的部门;
3.ConcreateCompony–具体部门类,该类不包含子部门,为公司的最小组成单位。注意:
1.本例以组合模式来展示本人所在公司的公司架构图。具体代码
#include <iostream>
#include <string>
#include <list>
using namespace std;
//抽象公司类
class Company
{
public:
Company(string name):
m_Name(name)
{
}
virtual void Add(Company* com) = 0; //增加部门
virtual void Remove(Company* com) = 0; //移除部门
virtual void Display() = 0; //显示部门结构
protected:
string m_Name; //名称
};
//含有子部们的公司部门类
class CompositeCompany :public Company
{
public:
CompositeCompany(string name):Company(name)
{}
void Add(Company* com)
{
this->m_ComList.push_back(com);
}
void Remove(Company* com)
{
this->m_ComList.remove(com);
}
void Display()
{
cout << this->m_Name << endl;
for each (Company* com in this->m_ComList)
{
cout << "****";
com->Display();
}
}
private:
list<Company*> m_ComList; //子部门类别
};
//不含子部们的最小部门类
class ConcreateCompony :public Company
{
public:
ConcreateCompony(string name) :Company(name)
{}
void Add(Company* com)
{
return;
}
void Remove(Company* com)
{
return;
}
void Display()
{
cout << "****"<<this->m_Name << endl;
}
};
int main()
{
//建立总公司
CompositeCompany* pHeadCompony = new CompositeCompany("某公司");
//添加行政部
CompositeCompany* pComp1 = new CompositeCompany("行政部");
pHeadCompony->Add(pComp1);
//添加财务部
CompositeCompany* pComp2 = new CompositeCompany("财务部");
pHeadCompony->Add(pComp2);
//添加研发部
CompositeCompany* pComp3 = new CompositeCompany("研发部");
pHeadCompony->Add(pComp3);
//添加硬件组
ConcreateCompony* pConcreate1 = new ConcreateCompony("硬件组");
pComp3->Add(pConcreate1);
//添加软件组
ConcreateCompony* pConcreate2 = new ConcreateCompony("软件组");
pComp3->Add(pConcreate2);
//添加算法组
ConcreateCompony* pConcreate3 = new ConcreateCompony("算法组");
pComp3->Add(pConcreate3);
//显示公司结构
pHeadCompony->Display();
delete pHeadCompony;
pHeadCompony = NULL;
delete pComp1;
pComp1 = NULL;
delete pComp2;
pComp2 = NULL;
delete pComp3;
pComp3 = NULL;
delete pConcreate1;
pConcreate1 = NULL;
delete pConcreate2;
pConcreate2 = NULL;
delete pConcreate3;
pConcreate3 = NULL;
getchar();
return 0;
}
- 输出结果
栏目导航
上一篇:设计模式学习笔记(C++实现)(八)–桥接模式
下一篇:设计模式学习笔记(C++实现)(十)–装饰模式
参考文献:
1.《设计模式:可复用面向对象软件的基础》