现在的位置: 首页 > 综合 > 正文

组合模式(Composite)

2013年09月08日 ⁄ 综合 ⁄ 共 1556字 ⁄ 字号 评论关闭

意图

将对象组合成树形结构以表示"部分-整体"的层次结构。
使得用户对单个对象和组合对象的使用更具有一致性。

类图


 

参与者
  • 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);

}


抱歉!评论已关闭.