您的位置:首页 > 其它

组合模式(Composite)

2013-11-15 08:42 232 查看
意图将对象组合成树形结构以表示"部分-整体"的层次结构。使得用户对单个对象和组合对象的使用更具有一致性。
类图



参与者Component
为组合中的对象声明接口
在适当的情况下,实现所有类共有接口的缺省行为。
声明一个接口用于访问和管理Component的子组件
(可选)在递归结构中定义一个接口,用于访问一个父部件,并在合适情况下实现它。
Leaf
在组合中表示叶节点对象,叶节点没有子节点。
在组合中定义对象的行为。
Composite
定义有子部件的的那些部件的行为
存储子部件
在Component接口中实现与子部件有关的操作。
Client
通过Component接口操纵组合部件的对象
代码:还有错。。。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Component
{
protected:
string name;
public:
virtual void Add(Component *c);
virtual void Remove(Component *c);
virtual void Display(int depth);

Component(string name)
{
this->name = name;
}
};
class Composite:public Component
{
private:
vector<Component *> children;
public:
Composite(string name):Component(name)
{

}
void Add(Component *c)
{
children.push_back(c);
}
void Remove(Component *c)
{
//children.delete(c);
}
void Display(int depth)
{
for(int i=0; i<depth; i++)
cout<<"-";
cout<<name<<endl;

for(vector<Component *>::iterator iter = children.begin(); iter!=children.end(); iter++)
{
(*iter)->Display(depth+2);
}
}
};

class Leaf:public Component
{
public:
Leaf(string name):Component(name)
{

}
void Display(int depth)
{
for(int i=0; i<depth; i++)
cout<<"-";
cout<<name<<endl;
}
};
int main()
{
Composite *root = new Composite("root");
root->Add(new Leaf("Leaf A"));
root->Add(new Leaf("Leaf B"));

Composite *comp = new Composite("Composite X");
comp->Add(new Leaf("Leaf XA"));
comp->Add(new Leaf("Leaf xB"));

root->Add(comp);
root->Display(1);
}


来自为知笔记(Wiz)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: