设计模式之组合模式

        组合模式是一种对象结构型模式,一般用于树型结构中,其本质是定义一个抽象组件类,该组件既可以代表叶子对象也可以代表容器对象(容器可以包含叶子和容器),使用时无需知道操作对象是叶子还是容器,实现对容器和叶子的无差别化操作。对子容器的节点操作时,本质上使用了递归遍历。

如下图的树型结构,

设计模式之组合模式_第1张图片

组合模式:

以下代码在VS2012上编译通过

.h文件

class Conponent//抽象组件类
{
public :
	virtual void addchildren(Conponent* child_);//添加子节点
	virtual void removechildren(Conponent* child_);//删除子节点
	virtual Conponent* getchildren(int num_);//获取某个子节点
	virtual void method();//调用组件方法
};

class leafConponent: public Conponent//末节点类
{
	
public :
	
	void addchildren(Conponent* child_);
	void removechildren(Conponent* child_);
	Conponent* getchildren(int num_);
	void method();
};


class contentConponent:public Conponent//容器类
{
	list mConp;
public:
	
	void addchildren(Conponent* child_);
	void removechildren(Conponent* child_);
	Conponent* getchildren(int num_);
	void method();

};

.cpp文件

void Conponent::addchildren(Conponent* child_)
{
	
}
void Conponent::removechildren(Conponent* child_)
{
	
}
Conponent* Conponent::getchildren(int num_)
{	
	return NULL ;
}
void Conponent::method()
{
	
}
void leafConponent::addchildren(Conponent* child_)
{
	cout<<"I can not add child"<::iterator mlist=mConp.begin();
	advance(mlist,num_);
	return *mlist;
}
void contentConponent::method()//递归遍历该容器下所有组件的方法
{
	cout<<"call contentConponent method"<::iterator i;
	for(i=mConp.begin();i!=mConp.end();i++)
	{
		(*i)->method();
	}
}

调用代码:

int _tmain(int argc, _TCHAR* argv[])
{
	Conponent* leaf1=new leafConponent();//创建叶子节点1
	Conponent* leaf2=new leafConponent();//创建叶子节点2
	Conponent* leaf3=new leafConponent();//创建叶子节点3
	Conponent* cont1=new contentConponent();//创建容器1
	Conponent* cont2=new contentConponent();//创建容器2
	cont1->addchildren(leaf1);//在容器1中添加叶子节点1
	cont1->addchildren(leaf2);//在容器1中添加叶子节点2
	cont2->addchildren(leaf3);//在容器2中添加叶子节点3
	cont2->addchildren(cont1);//在容器2中添加容器1
	cont2->method();//执行容器2中各节点的方法
	return 0;
}

执行结果:

设计模式之组合模式_第2张图片

你可能感兴趣的:(C++设计模式,设计模式,组合模式,C++编程)