18_设计模式之组合模式

模式定义:

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

使用动机:

软件在某种情况下,客户代码过多的依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(而非抽象接口)的变化将引起客户代码的频繁变化,带来了代码的维护性,扩展性等弊端。

class Component
{
public:
	virtual void process() = 0;
	virtual ~Component() { }
};

// 树节点
class Composite : public Component
{
private:
	string m_name;
	list<Component *> m_elements;

public:
	Composite(const string &name) :m_name(name) { }

	void add(Component *element)
	{
		m_elements.push_back(element);
	}
	void remove(Component *element)
	{
		m_elements.remove(element);
	}

	virtual void process() 
	{ 
		list<Component *>::iterator iter = m_elements.begin();
		for (; iter != m_elements.end(); iter++)
		{
			(*iter)->process();
		}
	}
};

// 叶子节点
class Leaf : public Component
{
private:
	string m_name;

public:
	Leaf(const string &name) :m_name(name) { }

	virtual void process()
	{
		
	}
};

void Invoke(Component &component)
{
	component.process();
}

int main(array<System::String ^> ^args)
{
	Composite root("root");
	Leaf leaf1("leaf1");
	root.add(&leaf1);
	Leaf leaf2("leaf2");
	root.add(&leaf1);

	Invoke(root);

	return 0;
}

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页