您的位置:首页 > 其它

设计模式学习-Composite(组合模式)

2011-05-09 23:57 453 查看
意图:将对象组合成树型结构以表示”部分-整体”的层次结构。Composite使得用户对于单个对象和组合对象的使用具有一致性

Compoite模式的关键是一个抽象类,即表示具体类也表示容器.

示意图:

.png]



适用性:

你想表示对象的部分-整体层次结构

你希望用户忽略组合对象和单个对象的不同,用户将统一的使用组合结构中的所有对象

示例代码:

animal:单个对象

//单个动物实体

class CAnimal
{
int id;
public:
CAnimal(int i)

{
id = i;
}
public:
~CAnimal(void)
{

}
public:
virtual void MadeSound()=0;//动物发出声音
};

class CDog:public CAnimal
{
private:

public:
CDog(int
i)
:CAnimal(i)
{
id = i;
}
~CDog()

{

}
public:
virtual void MadeSound()
{

_tprintf(_T("Dog %d Bark /n"),this->id);
}
};

CAnimalArray:组合对象

class CAnimalArray:public CAnimal
{
public:

CAnimalArray(void);
public:
~CAnimalArray(void);
public:

//组合对象中添加单个对象
void Add(CAnimal* pAnimal )
{

_animals.push_back(pAnimal);
}

//继承单个对象的操作
void MadeSound()//一群动物发出声音
{

_tprintf(_T("Animal Compsite shouts/n"));
ANIMALITERATOR iter =
_animals.begin();
for(;iter != _animals.end();iter++)

{
CAnimal* panimal = *iter;

panimal->MadeSound();//组合对象中的具体对象的操作
}
}

private:
typedef list<CAnimal*> ANIMALLIST;
typedef
ANIMALLIST::iterator ANIMALITERATOR;
ANIMALLIST _animals;

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