• 组合模式


    1】什么是组合模式?
    
    将对象组合成树形结构以表示“部分整体”的层次结构。
    
    组合模式使得用户对单个对象和组合对象的使用具有一致性。
    
    【2】组合模式代码示例:
    
    代码示例:
    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
    
    class Component
    {
    public:
        string name;
        Component(string name)
        {
            this->name = name;
        }
        virtual void add(Component *) = 0;
        virtual void remove(Component *) = 0;
        virtual void display(int) = 0;
    };
    
    class Leaf : public Component
    {
    public:
        Leaf(string name) : Component(name)
        {}
        void add(Component *c)
        {
            cout << "leaf cannot add" << endl;
        }
        void remove(Component *c)
        {
            cout << "leaf cannot remove" << endl;
        }
        void display(int depth)
        {
            string str(depth, '-');
            str += name;
            cout << str << endl;
        }
    };
    
    class Composite : public Component
    {
    private:
        vector<Component*> component;
    public:
        Composite(string name) : Component(name)
        {}
        void add(Component *c)
        {
            component.push_back(c);
        }
        void remove(Component *c)
        {
            vector<Component*>::iterator iter = component.begin();
            while (iter != component.end())
            {
                if (*iter == c)
                {
                    component.erase(iter++);
                }
                else
                {
                    iter++;
                }
            }
        }
        void display(int depth)
        {
            string str(depth, '-');
            str += name;
            cout << str << endl;
    
            vector<Component*>::iterator iter=component.begin();
            while (iter != component.end())
            {
                (*iter)->display(depth + 2);
                iter++;
            }
        }
    };
    
    
    int main()
    {
        Component *p = new Composite("小李"); 
        p->add(new Leaf("小王"));
        p->add(new Leaf("小强"));
    
        Component *sub = new Composite("小虎"); 
        sub->add(new Leaf("小王"));
        sub->add(new Leaf("小明"));
        sub->add(new Leaf("小柳"));
        
        p->add(sub);
        p->display(0);
    
        cout << "*******" << endl;
        sub->display(2);
    
        return 0;
    }
    //Result:
    /*
    小李
    --小王
    --小强
    --小虎
    ----小王
    ----小明
    ----小柳
    *******
    --小虎
    ----小王
    ----小明
    ----小柳
    */

    http://www.cnblogs.com/Braveliu/p/3946914.html

  • 相关阅读:
    Kotlin 基础
    ViewPager2
    8086-debug指令
    (四)主控板改IP,升级app,boot,mac
    (三)主控板生级uboot与内核
    (四)linux网络编程
    (七)嵌入式系统异常程序远程定位
    (六)ARM状态寄存器-PSR
    (五)stm32工程代码HardFault异常查错调试方法
    (十)makefile
  • 原文地址:https://www.cnblogs.com/leijiangtao/p/4534582.html
Copyright © 2020-2023  润新知