设计模式之九------compositer(组合)

         问题:

我们想以一种统一的方式管理整体和局部关系;就像一个班级,班里的所有人抽象为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();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值