设计模式学习-Composite(组合模式)
2011-05-09 23:57
525 查看
意图:将对象组合成树型结构以表示”部分-整体”的层次结构。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;
};
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;
};
相关文章推荐
- 设计模式学习笔记——组合(Composite)模式
- 设计模式学习之组合模式(Composite)
- 【设计模式】学习笔记13:组合模式(Composite)
- java 设计模式学习笔记八 composite组合模式
- 步步为营 .NET 设计模式学习笔记 十五、Composite(组合模式)
- java 设计模式学习笔记八 composite组合模式
- 设计模式学习之组合模式(Composite,结构型模式)(10)
- 设计模式学习-Composite(组合模式)
- C#面向对象设计模式学习笔记(8) - Composite 组合模式(结构型模式)
- 步步为营 .NET 设计模式学习笔记 十五、Composite(组合模式)
- 设计模式学习笔记---组合模式composite(Java版)
- 【设计模式】学习笔记13:组合模式(Composite)
- 步步为营 .NET 设计模式学习笔记 十五、Composite(组合模式)
- 面向对象设计模式之Composite组合模式学习笔记
- 设计模式学习系列六:组合模式(composite)
- 设计模式学习(结构型模式)—组合模式(Composite)
- 设计模式学习笔记Composite组合模式
- 【设计模式学习笔记九】【结构型模式】【组合模式(Composite)】
- 设计模式学习—组合实体模式(Composite Entity Design Pattern)
- Java设计模式之 —— 组合(Composite)