zoukankan      html  css  js  c++  java
  • 设计模式学习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;
           
    };

  • 相关阅读:
    如何在windows下安装GIT
    TortoiseGit 安装
    高并发大流量专题---3、前端优化(减少HTTP请求次数)
    高并发大流量专题---2、流量优化(防盗链处理)
    高并发大流量专题---1、高并发大流量解决方案总结
    yii2和laravel比较
    php开发面试题---日常面试题1
    php开发面试题---禁用cookie之后,如何使用session
    剑指offer---4、序列化二叉树
    北风设计模式课程---20、UML类图介绍
  • 原文地址:https://www.cnblogs.com/SkyMouse/p/2340739.html
Copyright © 2011-2022 走看看