组成模式(Composite)(结构型模式)

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

        有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
 
#include "stdafx.h"
#include <string>
#include <map>
#include <iostream>
using namespace std;

class Component
{
public:
	virtual void Add(Component* item)
	{
	}

	virtual void Remove(Component* item)
	{
	}

	virtual string GetName()
	{
		return string();
	}

	virtual void Operation() = 0;
};

class Composite : public Component
{
public:
	Composite(string name) : m_name(name)
	{

	}

public:
	virtual void Add(Component* item)
	{
		m_itemMap.insert(make_pair(item->GetName(), item));
	}

	virtual void Remove(Component* item)
	{
		m_itemMap.erase(item->GetName());
	}
	
	virtual string GetName()
	{
		return m_name;
	}
	
	virtual void Operation()
	{
		//可以做一些你想要的处理等
		for (auto it = m_itemMap.begin(); it != m_itemMap.end(); ++it)
		{
			it->second->Operation();
		}
	}

private:
	string m_name;
	map<string, Component*> m_itemMap; //放子节点的容器,达到树形结构
};

//叶子节点
class Leaf : public Component
{
public:
	Leaf(string name) : m_name(name)
	{

	}
public:
	virtual string GetName()
	{
		return m_name;
	}

	virtual void Operation()
	{
		cout<<"this is "<<m_name<<"object"<<endl;
	}
private:
	string m_name;
};

int _tmain(int argc, _TCHAR* argv[])
{
	Component* component1= new Composite("component1");
	Component* component2= new Composite("component2");

	Component* leaf1 = new Leaf("leaf1");
	Component* leaf2 = new Leaf("leaf2");
	Component* leaf3 = new Leaf("leaf3");

	component1->Add(leaf1);
	component1->Add(component2);
	component2->Add(leaf2);
	component2->Add(leaf3);

	component1->Operation();

	system("pause");
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值