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

  • 相关阅读:
    Javascript的私有变量和方法、共有变量和方法以及特权方法、构造器、静态共有属性和静态共有方法
    Spring4整合Hibernate4出现的错误的解决
    Javascript类的创建
    Kettle学习总结(一)
    Kettle Excel导入数据到数据库
    Python 爬虫 2 (转)
    Js仿腾讯微博效果
    飘雪效果
    列表获取对应图片
    飞入购物车
  • 原文地址:https://www.cnblogs.com/SkyMouse/p/2340739.html
Copyright © 2020-2023  润新知