问题:
我们想以一种统一的方式管理整体和局部关系;就像一个班级,班里的所有人抽象为People类,类中有一般的方法和管理的方法,一般的同学继承为Student,实现一般的方法,班长则需要实现一般的方法和管理的方法;管理的方法用于管理所有的其他人。我们只要用people就可以管理整个班级了;
解决方案:
将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和使用具有一致性。
源代码:
#include <iostream>
#include <VECTOR>
using namespace std;
class Component
{
public:
Component(){}
~Component(){}
virtual void Operator()=0;
virtual void Add(Component* com){}
virtual void Remove(Component* com){}
virtual Component *GetChild(int index){return NULL;}
private:
};
class Leaf:public Component{
public:
Leaf(){};
~Leaf(){};
virtual void Operator()
{
cout<<"Leaf Operator"<<endl;
}
};
class Composite:public Component{
public:
Composite(){}
~Composite()
{
//删除指针内存
}
virtual void Operator()
{
vector<Component*>::iterator ite=com.begin();
while(ite!=com.end())
{
(*ite)->Operator();
ite++;
}
}
virtual void Add(Component* com)
{
this->com.push_back(com);
}
virtual void Remove(Component* com)
{
this->com.erase(&com);
}
virtual Component *GetChild(int index)
{
return com[index];
}
private:
vector<Component*> com;
};
void main()
{
Leaf *l=new Leaf;
Leaf *p=new Leaf;
Component *com=new Composite;
com->Add(l);
com->Add(p);
com->Operator();
}