Composite Design Pattern 组合设计模式

组合设计模式,就是可以把多个类组合在一个大类中,形成一个树形结构。

#include <set>
#include <iostream>
#include <string>
using namespace std;

class Coporate
{
protected:
	string name;
	set<Coporate *> coporate;

public:
	explicit Coporate(string n = "", string d = "") : name(n), coporate() {}

	virtual string getName()
	{
		return name;
	}

	virtual void add(Coporate *c)
	{
		coporate.insert(c);
	}

	virtual void show()
	{
		set<Coporate *>::iterator it = coporate.begin();
		for ( ; it != coporate.end(); it++)
		{
			(*it)->show();
		}
	}

	virtual void remove(Coporate *c)
	{
		coporate.erase(c);
	}
};

class VicePresident : public Coporate
{
	string division;
public:
	explicit VicePresident(string n = "", string d = "")
	{
		name = n;
		division = d;
	}

	virtual void show()
	{
		cout<<"Vice President's Name is : "<<name
			<<"; In Division: "<<division<<endl;//关键处
	}
};

class Division : public Coporate
{
public:
	explicit Division(string n = "")
	{
		name = n;
	}
};

class Coporation : public Coporate
{
public:
	Coporation() {}
};

int main()
{
	Coporation corp;

	Division sale("Sales Department");
	VicePresident vp1("Jelly", sale.getName());
	VicePresident vp2("Kelly", sale.getName());
	sale.add(&vp1);
	sale.add(&vp2);

	Division tech("Technique Department");
	VicePresident vp3("Qilly", tech.getName());
	VicePresident vp4("Melly", tech.getName());
	tech.add(&vp3);
	tech.add(&vp4);

	VicePresident vp("Billy", "At large");
	corp.add(&vp);

	corp.add(&sale);
	corp.add(&tech);

	corp.show();

	return 0;
}

运行:

Composite Design Pattern 组合设计模式

时间: 2024-08-01 21:06:55

Composite Design Pattern 组合设计模式的相关文章

State Design Pattern 状态设计模式

设置好内部状态,然后根据不同的函数作为行为模式,进行状态转换. 有点像Finite Automata算法,两者的思想是一样的. 会Finite Automata,那么这个设计模式就很容易了. #pragma once #include <stdlib.h> #include <math.h> #include <random> #include <time.h> enum STATES { FULLY_RENTED, WAITING, GOT_APPLICA

State Design Pattern 状态设计模式2

其实本设计模式可以实现一些像人工智能式的问答. 这个跟人回答问题差不多,根据不同的问题作出不同的回答,而且在不同的状态,也会作出不同的回答. 如果有大量的数据,那么就可以作出千变万化的问答效果来哦. #include <stdio.h> enum STATE { HUNGARY, EAT, FULL }; class State { STATE myState; public: State(STATE s = HUNGARY) : myState(s) { } void eat() { swi

Proxy Design Pattern 代理设计模式

代理设计模式,这个模式很多用于服务器客户端之类的,上网也经常使用代理之类的,想起来感觉是很复杂的,不过这个设计模式本身是很简单的. 就是一个类调用另外一个类的函数,客户调用的是一个类,而实际的工作是由另外一个类做的. 体现这个设计模式的代码: #include <stdio.h> class RealObj { public: virtual void handleReq() = 0; }; class DoSomething : public RealObj { public: void h

7.5.1.1复合设计模式(THE COMPOSITE DESIGN PATTERN)

复合模式可以把几个对象组合成一个复合对象,使用这种的方法与使用基本对象一样.图 7.6 显示了面向对象实现这种模式的通常方法. 图 7.6CompositeComponent 是包含其他组件集合的类:它继承自 AbstractComponent,因此,能够使用基本组件的地方,也一样可以使用其他组件,比如,ConcreteComponent. 复合对象用复合类表示,程序能够使用 AbstractComponent 类来处理,因此,不需要知道基本对象与复合对象之间的区别.我们还可以看一个使用虚拟方法

Composite模式(组合设计模式)

Composite 设计模式? 在计算机的文件系统中,有"文件夹"的概念(在有些操作系统(Linux操作系统)中,也称为"目录").文件夹里面既可以放入文件,也可以放入其他文件夹(子文件夹).在子文件夹中,一样地既可以放入文件,也可以放入子文件夹.可以说,文件夹是形成了一种容器结构.递归结构. 结构模式:能够使容器与内容具有一致性,创造出递归结构的模式就是Composite模式. 关注点:使用Composite模式可以使容器与内容具有一致性,也可以称其为多个和单个的

DP什么意思 design pattern 设计模式

DP  design pattern 大话设计模式  中的DP 是设计模式的意思 设计模式的书 ,最经典最原始的就是 GOF 的<设计模式>了. 设计模式的书基本上大多是以这 20 多个模式分开讲.含<大话设计模式> 学了 OOL 写的程序基本上是 OB 的. 只有慢慢掌握了 DP 才能写出真正的 OO 程序. 思想 -> 设计原则 -> DP -> OOD

设计模式(Design pattern)概述

设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结, 使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性 设计框架 可复用面向对象软件系统一般划分为两大类:应用程序工具箱和框架(Framework) 我们平时开发的具体软件都是应用程序 而框架是构成一类特定软件可复用设计的一组相互协作的类 框架通常定义了应用体系的整体结构类和对象的关系等等设计参数,以便于具体应用实现者能集中精力于应用本身的特定细节. 框架主要记录软件应用中

Head First 之 Design Pattern(一):Strategy Pattern &amp;&amp; 初入设计模式殿堂

头一回阅读<Head First 设计模式>,感觉语言生动形象,把一个个抽象的模式描述的浅显易懂,就像白话文一样. 正如作者推荐如何使用这本书. 你懂Java吗(不太懂... 会C++不影响吧)? 你想学习.了解.记得并应用设计模式,以及其所基于的OO设计原则吗(是的,我正在深入学习C++呢)? 你是不是更喜欢一种轻松愉悦的学习环境(absolutely)? 这本书正是我需要的~   "Head First"就是那些不断学习的人们,像他们致敬,共勉加油~ 使用设计模式最好的

Design Pattern 设计模式1 - Strategy 1

实现 : Defferent Heros attack Defferently. - 不同的英雄使用不用的招数 Strategy设计的思路: 基类A,更加小的基类B,新的继承类C: 1 从基类A中抽出一个更加小的基类B 2 利用这个更加小的基类B实现不同的效果 3 把这个更加小的基类B包含进基类A中去 4 新的继承类C只需要和基类A打交道,设计不同行为,不需要理会更加小的基类B #pragma once #ifndef _STRATEGY_HEROS_H #define _STRATEGY_HE