设计模式读书笔记: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();
}
附加:
版权声明:本文为博主原创文章,未经博主允许不得转载。

大话设计模式—组合模式

组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,...
  • lmb55
  • lmb55
  • 2016年04月01日 22:07
  • 2063

C++设计模式之八:Composite(组合)

一、意图: 将对象组合成树形结构以表示成“部分-整体”的层次结构; 二、类图: 三、组成元素: Component:顶层接口,用于访问子组件; Leaf:叶节点,没有...
  • conanswp
  • conanswp
  • 2012年05月28日 20:50
  • 1104

浅谈JAVA设计模式之——组合模式(Composite)

一、概述 将对象组合成树形结构以表示"部分-整体"的层次结构。"Composite使得用户对单个对象和组合对象的使用具有一致性。 二、适用性 1.你想表示对象的部分-整体层次结构。 2.你希望用户忽略...
  • l1028386804
  • l1028386804
  • 2015年05月03日 12:44
  • 1973

设计模式:组合模式(COMPOSITE)|菜鸟教程

定义组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模...
  • lory17
  • lory17
  • 2017年03月17日 22:41
  • 316

[设计模式]_[中级]_[组合模式(Composite)分析与总结]

序: 组合模式在实际开发中实在是使用的很频繁,很实用. 抽象场景: 1. 你想表示对象的部分-整体层次结构.[原书] -- 如果想对某些对象打包统一处理时,比如用std::vector. 2. ...
  • infoworld
  • infoworld
  • 2015年09月13日 23:43
  • 1512

23种设计模式-依赖、关联、聚合和组合之间区别的理解

在学习面向对象设计对象关系时,依赖、关联、聚合和组合这四种关系之间区别比较容易混淆。特别是后三种,仅仅是在语义上有所区别,所谓语义就是指上下文环境、特定情景等。他们在编程语言中的体现却是基本相同的,但...
  • a925907195
  • a925907195
  • 2014年12月17日 15:47
  • 3114

设计模式中组合(Compose)和聚合(Aggregate)的关系

(Composite/Aggregate ReusePrinciple ,CARP)要尽量使用对象组合,而不是继承关系达到软件复用的目的 定义:经常又叫做合成复用原则(Composite...
  • davidsu33
  • davidsu33
  • 2014年07月24日 17:34
  • 2613

设计模式拾荒之组合模式(Composite Pattern): 复杂的树形结构

组合模式”和“组合优于继承”这一俗语之间, 并没有直接的概念联系。
  • lengxiao1993
  • lengxiao1993
  • 2017年03月20日 23:46
  • 454

设计模式简单代码之Composite模式(老师分配任务篇)

/***************************************************************************************************...
  • dylgsy
  • dylgsy
  • 2006年07月04日 13:12
  • 2014

【设计模式攻略】结构型模式之Composite模式

概要 具备一系列既有独立功能,又需要排列组合其中的几种功能来达成一些复合的新功能时,可以采用组合模式。比如说,你设计了一个备份模块,有email备份,note备份,message备份,log备份等一系...
  • my_business
  • my_business
  • 2012年04月10日 17:42
  • 1996
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式读书笔记:Composite(组合)
举报原因:
原因补充:

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