• 设计模式学习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;
           
    };

  • 相关阅读:
    选择结构(if、switch)
    顺序结构程序
    矩阵变换、矩阵求值
    basicRF双向灯光控制
    基于BasicRF点对点无线开发基础知识
    MATLAB矩阵处理—特殊矩阵
    ScrollView嵌套RecyclerView时滑动出现的卡顿
    如何给GridView添加网格
    Android 中关于ListView分割线的设置
    关于ScrollView嵌套ListView问题
  • 原文地址:https://www.cnblogs.com/SkyMouse/p/2340739.html
Copyright © 2020-2023  润新知