意图:将对象组合成树型结构以表示”部分-整体”的层次结构。Composite使得用户对于单个对象和组合对象的使用具有一致性
Compoite模式的关键是一个抽象类,即表示具体类也表示容器.
适用性:
你想表示对象的部分-整体层次结构
你希望用户忽略组合对象和单个对象的不同,用户将统一的使用组合结构中的所有对象
示例代码:
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;
};