青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

emptysoul

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  25 Posts :: 0 Stories :: 23 Comments :: 0 Trackbacks

常用鏈接

留言簿(18)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

組合模式(Composite)的定義為:組合多個對象形成樹形結構,以表示整體-部分的結構層次。組合模式對單個對象和組合對象的使用具有一致性。其結構圖如下:
 

例如一個新聞的樹形菜單,它包含很多原始菜單(如國內、國際),以及由其子菜單組成的組合節點(如國內新聞下的時事、社會等),結構圖如下:


實現代碼:
//Menu.h
#include <string>

class Menu  
{
public:
    
virtual ~Menu();

    
virtual void Add(Menu*);
    
virtual void Remove(Menu*);
    
virtual Menu* GetChild(int);
    
virtual void Display() = 0;
protected:
    Menu();
    Menu(std::
string);
    std::
string m_strName;
};

//Menu.cpp
#include "stdafx.h"
#include 
"Menu.h"

Menu::Menu()
{

}

Menu::Menu(std::
string strName) : m_strName(strName)
{

}

Menu::
~Menu()
{

}

void Menu::Add(Menu* pMenu)
{}

void Menu::Remove(Menu* pMenu)
{}

Menu
* Menu::GetChild(int index)
{
    
return NULL;
}

//SubMenu.h
#include "Menu.h"

class SubMenu : public Menu  
{
public:
    SubMenu();
    SubMenu(std::
string);
    
virtual ~SubMenu();

    
void Display();
};

//SubMenu.cpp
#include "stdafx.h"
#include 
"SubMenu.h"
#include 
<iostream>

using namespace std;

SubMenu::SubMenu()
{

}

SubMenu::SubMenu(
string strName) : Menu(strName)
{

}

SubMenu::
~SubMenu()
{

}

void SubMenu::Display()
{
    cout 
<< m_strName << endl;
}

//CompositMenu.h
#include "Menu.h"
#include 
<vector>

class CompositMenu : public Menu
{
public:
    CompositMenu();
    CompositMenu(std::
string);
    
virtual ~CompositMenu();

    
void Add(Menu*);
    
void Remove(Menu*);
    Menu
* GetChild(int);
    
void Display();
private:
    std::vector
<Menu*> m_vMenu;
};

//CompositMenu.cpp
#include "stdafx.h"
#include 
"CompositMenu.h"
#include 
<iostream>

using namespace std;

CompositMenu::CompositMenu()
{
    
}

CompositMenu::CompositMenu(
string strName) : Menu(strName)
{

}

CompositMenu::
~CompositMenu()
{

}

void CompositMenu::Add(Menu* pMenu)
{
    m_vMenu.push_back(pMenu);
}

void CompositMenu::Remove(Menu* pMenu)
{
    m_vMenu.erase(
&pMenu);
}

Menu
* CompositMenu::GetChild(int index)
{
    
return m_vMenu[index];
}

void CompositMenu::Display()
{
    cout 
<< "+" << m_strName << endl;
    vector
<Menu*>::iterator it = m_vMenu.begin();
    
for (; it != m_vMenu.end(); ++it)
    {
        cout 
<< "|-";
        (
*it)->Display();
    }
}

#include 
"stdafx.h"
#include 
"Menu.h"
#include 
"SubMenu.h"
#include 
"CompositMenu.h"

int main(int argc, char* argv[])
{
    Menu
* pMenu = new CompositMenu("國內新聞");
    pMenu
->Add(new SubMenu("時事新聞"));
    pMenu
->Add(new SubMenu("社會新聞"));
    pMenu
->Display();
    pMenu 
= new CompositMenu("國際新聞");
    pMenu
->Add(new SubMenu("國際要聞"));
    pMenu
->Add(new SubMenu("環球視野"));
    pMenu
->Display();

    
return 0;
}

最后輸出為:
+國內新聞
|-時事新聞
|-社會新聞
+國際新聞
|-國際要聞
|-環球視野
posted on 2009-02-11 19:51 emptysoul 閱讀(2070) 評論(3)  編輯 收藏 引用

Feedback

# re: 設計模式-組合模式 2009-07-09 13:58 lu-bei
嘿,例子很棒,只是存在內存泄露^.^

Thanks for your sample!  回復  更多評論
  

# re: 設計模式-組合模式[未登錄] 2011-11-29 22:49 jemmyLiu
你的其他的設計模式我都看過了 實現的挺簡單明了的 就是沒有釋放內存的習慣 像java轉過來的 呵呵  回復  更多評論
  

# re: 設計模式-組合模式 2012-08-27 20:12 江南煙雨
@lu-bei
只需要在CompositeMenu的析構函數中delete vector中的各個指針就可以了~  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国内精品免费在线观看| 亚洲精品乱码久久久久久久久| 国产精品一区二区男女羞羞无遮挡| 欧美大片在线观看| 欧美激情一区二区三区在线| 欧美精品久久久久久| 欧美日韩系列| 国产麻豆综合| 亚洲国产va精品久久久不卡综合| 亚洲国产精品传媒在线观看| 一个人看的www久久| 欧美制服丝袜第一页| 久久人人爽人人爽爽久久| 欧美成人免费全部| 亚洲美女福利视频网站| 午夜国产精品视频| 美女精品一区| 国产精品久久久久久模特| 激情欧美国产欧美| 一区二区三区欧美成人| 久久久91精品| 99成人在线| 久久久无码精品亚洲日韩按摩| 欧美高清视频一区二区| 国产日韩欧美中文在线播放| 91久久夜色精品国产九色| 先锋资源久久| 亚洲人成毛片在线播放| 午夜精品久久久| 欧美巨乳在线观看| 亚洲丶国产丶欧美一区二区三区 | 久久久www成人免费毛片麻豆| 久久久久久亚洲精品杨幂换脸| 欧美另类一区| 国语精品一区| 香蕉久久夜色| 91久久精品视频| 欧美主播一区二区三区美女 久久精品人| 欧美gay视频激情| 国产主播精品在线| 亚洲欧美制服另类日韩| 亚洲人被黑人高潮完整版| 欧美资源在线| 国产精品亚洲综合久久| 日韩亚洲欧美一区| 牛牛国产精品| 欧美在线亚洲| 国产亚洲精品aa| 欧美在线观看你懂的| 中文有码久久| 国产精品海角社区在线观看| 一二三四社区欧美黄| 亚洲第一在线视频| 久久婷婷人人澡人人喊人人爽 | 久久久av毛片精品| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲精品欧美激情| 亚洲第一区中文99精品| 久久中文精品| 91久久夜色精品国产网站| 免费看精品久久片| 久久性天堂网| 在线免费不卡视频| 欧美成人一区在线| 麻豆九一精品爱看视频在线观看免费| 精品999久久久| 美女精品在线观看| 猫咪成人在线观看| 亚洲精品久久久蜜桃| 亚洲高清在线精品| 欧美日韩第一区| 亚洲一区二区三区三| 亚洲性感激情| 国产亚洲一级| 欧美大片91| 欧美日韩不卡在线| 亚洲男人天堂2024| 午夜一区不卡| 一区二区在线视频观看| 欧美福利电影网| 欧美日本一道本在线视频| 亚洲性av在线| 欧美一区二区免费视频| 在线日韩中文字幕| 亚洲精品老司机| 国产麻豆精品theporn| 久久久综合免费视频| 欧美77777| 亚洲人成网站在线观看播放| 欧美日韩日本国产亚洲在线 | 亚洲图片在线观看| 午夜精品美女久久久久av福利| 韩国av一区| 亚洲日本欧美在线| 国产日韩欧美| 亚洲二区视频在线| 国产精品一区二区在线观看不卡| 久久字幕精品一区| 欧美日韩中文| 免费观看成人网| 国产精品国产三级国产普通话蜜臀| 久久久午夜精品| 欧美日韩一区二区三区高清| 久热国产精品| 国产精品美女久久久久av超清| 免费在线成人| 国产无遮挡一区二区三区毛片日本| 亚洲电影下载| 国产亚洲第一区| 一本久道久久久| 亚洲人精品午夜在线观看| 羞羞视频在线观看欧美| 一区二区三区国产精华| 久久久久久夜| 久久久久久久久久久久久久一区| 欧美日韩中文字幕在线| 欧美激情一区二区在线| 好吊日精品视频| 亚洲欧美精品在线| 亚洲午夜未删减在线观看| 欧美成人有码| 欧美风情在线| 在线精品亚洲| 久久久成人网| 久久理论片午夜琪琪电影网| 国产精品护士白丝一区av| 亚洲精品小视频| 亚洲毛片在线| 欧美高清视频一区| 欧美成人免费网| 亚洲激情av| 嫩模写真一区二区三区三州| 噜噜噜在线观看免费视频日韩| 国产欧美一区二区精品忘忧草 | 亚洲国产综合在线| 亚洲激情视频| 免费视频亚洲| 亚洲第一偷拍| 一本色道久久99精品综合| 欧美精品免费观看二区| 最新国产成人在线观看| 日韩午夜免费视频| 欧美巨乳在线| 亚洲午夜激情在线| 久久精品欧美日韩精品| 黄色欧美成人| 免费国产自线拍一欧美视频| 欧美韩日高清| 一本色道久久综合亚洲精品高清 | 国产精品你懂的在线欣赏| 日韩视频在线播放| 亚洲字幕在线观看| 国产精品视频九色porn| 亚洲欧美在线高清| 老色批av在线精品| 亚洲人成网站色ww在线| 欧美伦理视频网站| 亚洲一二三区在线| 欧美一区三区三区高中清蜜桃 | 久久精品最新地址| 欧美国产视频在线| 亚洲一二三区在线观看| 国产欧美日韩免费看aⅴ视频| 久久er99精品| 最新日韩在线视频| 欧美一区二区三区在| 一区在线观看视频| 欧美国产日产韩国视频| 亚洲一区二区不卡免费| 免费中文字幕日韩欧美| 亚洲少妇最新在线视频| 国产日韩欧美中文在线播放| 欧美r片在线| 午夜精品久久久久影视| 亚洲黄色在线观看| 欧美一区日本一区韩国一区| 91久久国产精品91久久性色| 欧美色图天堂网| 久久天天狠狠| 亚洲一区二区三区乱码aⅴ| 亚洲高清av| 久久九九精品99国产精品| 99re66热这里只有精品4 | 亚洲欧美一区二区视频| 黄色成人在线| 国产精品久久久久久久久久久久| 久久乐国产精品| 亚洲免费视频一区二区| 最新成人av网站| 男人的天堂亚洲| 欧美在线短视频| 亚洲免费婷婷| 亚洲美女啪啪| 亚洲国产成人tv| 国产一区二区精品| 国产精品女人网站| 欧美日韩一区二区视频在线观看 | 欧美成人首页| 久久性色av| 欧美中文字幕不卡|