Composite定义:
将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性.
调用方法时,会遍历这个树。就用一个树的例子来说明。(我仿照别人写的C++版本)
树的抽象基类:
class treestuff 
...{
public:
treestuff();
virtual ~treestuff();
virtual void Add(treestuff *t)= 0;
virtual void Delete(treestuff *t) = 0;
virtual void Call() = 0;
};叶子类:没有子节点。
class Leaf : public treestuff 
...{
public:
Leaf(const char *p):m_name(p)...{}
virtual ~Leaf();
virtual void Add(treestuff *t);
virtual void Delete(treestuff *t);
virtual void Call();
string m_name;
};
void Leaf::Call()
...{
cout<<"i am a leaf:"<<m_name<<endl;
}树干类:
class Limb : public treestuff 
...{
public:
Limb(const char *p):m_name(p)...{}
virtual ~Limb();

virtual void Add(treestuff *t);
virtual void Delete(treestuff *t);
virtual void Call();
private:
list<treestuff *> m_list;
string m_name;
}
void Limb::Add(treestuff *t)
...{
m_list.push_back(t);
}
void Limb::Delete(treestuff *t)
...{
m_list.remove(t);
}
void Limb::Call()
...{
cout<<"Limb"<<m_name;
treestuff *p;
for (list<treestuff *>::iterator it = m_list.begin(); it != m_list.end(); ++it)
...{
p = *it;
p->Call();
}
}Test:
treestuff *t = new Limb("主树干"); //代表一颗树
treestuff *t1 = new Limb("次树干");
Leaf *p2 = new Leaf(" 次树干上的叶子1");
Leaf *p3 = new Leaf(" 次树干上的叶子2");
Leaf *p1 = new Leaf("主树干上的叶子");

t1->Add(p2);
t1->Add(p3);
t->Add(t1);
t->Add(p1);
t->Call(); //遍历有所的树干和叶子。
36

被折叠的 条评论
为什么被折叠?



