Composite Pattern的精华所在
Composite pattern网上有很多资料和定义,这里就不详细阐述了。个人感觉,这种设计模式最主要的特点是:Composite 让clients 得以一致方式对待「个別物」和「合成物」。在这个设计模式中,个别物和合成物都有一个共同的父类,合成物中有一个容器(如Vector),容器类型是父类定义的类型。这种巧妙的设计让个别物和合成物都可以放置在同一个容器中。这就是Composite pattern巧妙的地方。
话不多说,上代码:
// An highlighted block
#include <iostream>
#include <vector>
using namespace std;
class Component
// lowest common
{
public: virtual void traverse() = 0;
};
class Leaf: public Component
{
int value;
public:
Leaf(int val)
{
value= val;
}
void traverse()
{
cout<< value<< ' ';
}
};
class Composite: public Component
{
vector <Component*> children;
public:
void add(Component* ele)
{
children.push_back(ele);
}
void traverse()
{
for (inti = 0; i < children.size(); i++)
children[i]->traverse();
}
};
int main()
{
Compositecontainers[4];
for (int i = 0; i < 4; i++)
for (intj = 0; j < 3; j++)
containers[i].add(newLeaf(i*3+j));
for (int i = 1; i < 4; i++)
containers[0].add(&(containers[i]));
for (int i = 0; i < 4; i++)
{
containers[i].traverse(); cout<< endl;
}
}