zoukankan      html  css  js  c++  java
  • 组合模式

    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

  • 相关阅读:
    Eclipse Mac OS 安装 Subversion插件subclipse 缺失JavaHL解决方案
    Eclipse Mac OS 安装 最新版 Subversion插件subclipse
    mac OS 安装 Homebrew软件包管理器
    Ribbon 框架简介及搭建
    Ribbon 框架简介及搭建
    TinyMCE下载及使用
    努力啊。
    逃离
    怎么学习
    烂代码
  • 原文地址:https://www.cnblogs.com/leijiangtao/p/4534582.html
Copyright © 2011-2022 走看看