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

  • 相关阅读:
    C# post请求 HttpWebRequest
    C# 获取当前路径
    计算n的阶乘
    查找2-n之间素数的个数
    循环嵌套-打印不定长特殊*号图形
    流程控制-物流费用计算(嵌套if)
    基于Arduino的按键控制LED实验
    基于Arduino的红外遥控
    PS/2的相关知识
    Arduino_URO端口与AtMega328p引脚对应图
  • 原文地址:https://www.cnblogs.com/SkyMouse/p/2340739.html
Copyright © 2011-2022 走看看