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

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

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

示意图:

Compsite

适用性:

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

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

示例代码:

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;
       
};

原文地址:https://www.cnblogs.com/SkyMouse/p/2340739.html