设计模式读书笔记:Composite(组合)

原创 2015年07月10日 16:01:01

意图:

将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。

结构图:来自 《23种设计模式 - 郗晓勇》


实现:https://github.com/panshiqu/patterns/tree/master/Composite

Component

#include <iostream>

namespace NS_COMPOSITE {

class Component {
public:
	Component(std::string name) : _name(name) {}
	virtual ~Component() {}
	virtual void operation(void)
	{
		std::cout << _name << std::endl;
	}
	virtual void add(Component *component) {}
	virtual void remove(Component *component) {}

private:
	std::string _name;
};

} /* namespace NS_COMPOSITE */
Composite

#include "Component.h"
#include <list>

namespace NS_COMPOSITE {

class Composite : public Component
{
public:
	Composite(std::string name) : Component(name) {}
	virtual ~Composite() {}
	virtual void operation(void)
	{
		Component::operation();
		std::list<Component *>::iterator itr = _components.begin();
		for (; itr != _components.end(); itr++)
		{
			(*itr)->operation();
		}
	}
	virtual void add(Component *component)
	{
		_components.push_back(component);
	}
	virtual void remove(Component *component)
	{
		// do remove
	}

private:
	std::list<Component *> _components;
};

} /* namespace NS_COMPOSITE */
Leaf

#include "Component.h"

namespace NS_COMPOSITE {

class Leaf : public Component
{
public:
	Leaf(std::string name) : Component(name) {}
	virtual ~Leaf() {}
	virtual void operation(void)
	{
		Component::operation();
	}
};

} /* namespace NS_COMPOSITE */
main

#include "Composite/Composite.h"
#include "Composite/Leaf.h"
using namespace NS_COMPOSITE;
int main(void)
{
	Composite c1("c1");
	Leaf l1("l1");
	Composite c2("c2");
	c1.add(&l1);
	c1.add(&c2);
	Leaf l2("l2");
	c2.add(&l2);
	c1.operation();
}
附加:

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

设计模式读书笔记-----组合模式

我们对于这个图片肯定会非常熟悉,这两幅图片我们都可以看做是一个文件结构,对于这样的结构我们称之为树形结构。在数据结构中我们了解到可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可以对叶子...

《Android源码设计模式》读书笔记 (19) 第19章 组合模式

前言 组合模式:部分和整体的模式,结构型设计模式之一.他将一组相似的对象看做一个对象处理,并根据一个树状结构来组合对象. 在android开发过程中,使用得并不多,更适用于对一些界面UI的架构设计上,...

大话设计模式读书笔记(十六) 组合模式

组合模式: 组合模式(Composite):将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 组合模式UMl结构图: jav...
  • xsyfl
  • xsyfl
  • 2017-04-22 13:51
  • 58

代理模式、装饰模式、适配器模式、组合模式、桥梁模式、外观模式、享元模式【读书笔记】设计模式4章:结构型模式

结构型模式描述了如何将对象或类结合在一起,形成更加强大的结构。 代理模式 定义 也叫委托模式为其他对象提供一种代理,以控制这个对象的访问角色:抽象角色、真实角色、代理...

C++设计模式读书笔记

  • 2009-11-18 15:45
  • 1.64MB
  • 下载

java 设计模式学习笔记八 composite组合模式

composite组合模式 将对象以树形式组织起来和chain of responsibility模式类似 好处:  可以一致使用组合结构和单个对象  不必关心组合体内是否加入新部件 ...

设计模式学习笔记(九)——Composite组合模式

Composite组合模式主要是应对这样的问题:一类具有“容器特征”的对象——即他们在充当对象的同时,又是其他对象的容器的情况。在编写时我们常常会造成:客户代码过多地依赖于对象容器复杂的内部实现,对象...

【设计模式】学习笔记13:组合模式(Composite)

认识组合模式 上一篇中,我们可以用迭代器来实现遍历一个集合(数组,ArrayList, Vector, HashTable等)。 假设有这样一种集合结构i:餐厅里有一份菜单,菜单里面还有子菜单,其实...

设计模式C++学习笔记之十五(Composite组合模式)

15.1.解释 概念:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合的使用具有一致性。 main(),客户 CCorpNode,抽象基类,实现基本...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)