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

emptysoul

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

常用鏈接

留言簿(18)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

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

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


實現(xiàn)代碼:
//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("國內(nèi)新聞");
    pMenu
->Add(new SubMenu("時事新聞"));
    pMenu
->Add(new SubMenu("社會新聞"));
    pMenu
->Display();
    pMenu 
= new CompositMenu("國際新聞");
    pMenu
->Add(new SubMenu("國際要聞"));
    pMenu
->Add(new SubMenu("環(huán)球視野"));
    pMenu
->Display();

    
return 0;
}

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

Feedback

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

Thanks for your sample!  回復(fù)  更多評論
  

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

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


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲午夜在线观看视频在线| 一本色道久久综合| 久久婷婷一区| 欧美.www| 一区二区三区国产精品| 国产精品国产三级国产专播品爱网 | 欧美在线日韩精品| 久久天天狠狠| 亚洲毛片在线观看| 国产精品成人一区二区艾草| 香蕉久久一区二区不卡无毒影院| 久热精品视频在线| 99亚洲伊人久久精品影院红桃| 国产精品久久久久国产精品日日| 欧美一级久久久久久久大片| 欧美成人资源网| 亚洲一区二区三区四区五区午夜 | 国产精品久久久久一区二区| 午夜一区在线| 亚洲国产成人久久| 亚洲欧美另类在线观看| 精品成人在线| 欧美午夜视频在线| 久久精品一区二区三区不卡| 亚洲日本欧美日韩高观看| 欧美一区二粉嫩精品国产一线天| 亚洲第一区在线| 国产精品久久久久久久久动漫| 久久精品国产清自在天天线| 一本色道久久综合亚洲二区三区| 久久久天天操| 亚洲天堂黄色| 亚洲经典视频在线观看| 国产嫩草一区二区三区在线观看| 你懂的视频欧美| 亚欧成人在线| 一区二区动漫| 亚洲国产日韩一区| 久久亚洲国产成人| 亚洲午夜激情网页| 亚洲日本中文| 伊甸园精品99久久久久久| 国产精品亚洲一区| 欧美喷潮久久久xxxxx| 久久婷婷国产麻豆91天堂| 亚洲一区二区高清| 亚洲理伦在线| 亚洲第一福利在线观看| 久久久久久久波多野高潮日日| 亚洲一区二区欧美| 一区二区三区高清在线| 亚洲黄色免费| 亚洲丶国产丶欧美一区二区三区| 国产色婷婷国产综合在线理论片a| 欧美日韩亚洲不卡| 欧美久久久久久久久| 另类专区欧美制服同性| 久久久久久九九九九| 欧美一区精品| 欧美在线观看www| 午夜亚洲视频| 午夜视频在线观看一区| 亚洲一区二区日本| 亚洲一区美女视频在线观看免费| 一区二区免费在线播放| 一本色道久久综合亚洲精品高清| 亚洲欧洲综合另类在线| 亚洲国产综合在线看不卡| 亚洲福利av| 亚洲欧洲一区二区天堂久久| 亚洲国产欧美在线人成| 亚洲激情欧美激情| 亚洲激情小视频| 亚洲欧洲三级电影| 亚洲美女一区| 宅男66日本亚洲欧美视频| 一本色道久久综合亚洲精品婷婷| 99热精品在线观看| 正在播放亚洲一区| 亚洲综合二区| 久久精品av麻豆的观看方式| 久久精精品视频| 久久深夜福利免费观看| 免费在线观看成人av| 欧美激情一区二区三区四区| 欧美日韩精品免费在线观看视频| 欧美日韩成人精品| 国产精品久久久久久影视| 国产日本欧洲亚洲| 极品少妇一区二区| 亚洲精品在线观看免费| 亚洲一区二区三区777| 欧美中文在线免费| 免费成人在线观看视频| 最新国产乱人伦偷精品免费网站| 一区二区欧美在线观看| 午夜亚洲福利| 欧美大片免费| 国产精品久久国产三级国电话系列 | 国产一区清纯| 亚洲级视频在线观看免费1级| 一区二区三区波多野结衣在线观看| 一区二区三区四区精品| 久久都是精品| 欧美电影在线| 亚洲视频你懂的| 久久av最新网址| 欧美人妖在线观看| 国产一区二区三区精品欧美日韩一区二区三区 | 激情久久五月| 在线视频日韩| 久久久综合网站| 亚洲乱码精品一二三四区日韩在线 | 亚洲精品欧美日韩专区| 亚洲欧美日韩精品久久| 久久嫩草精品久久久精品| 亚洲激情自拍| 欧美一区二区播放| 欧美激情第9页| 国产亚洲欧美另类中文 | 9i看片成人免费高清| 欧美在线亚洲| 欧美新色视频| 136国产福利精品导航网址应用 | 亚洲国产欧美国产综合一区| 亚洲欧美日韩精品久久久| 欧美成人高清| 国产视频一区在线观看一区免费| 亚洲精品国产精品国自产观看 | 欧美成人精品不卡视频在线观看| 国产精品多人| 亚洲国产一区二区三区高清| 欧美一区二区三区在线观看视频| 亚洲国产日韩欧美在线99| 亚洲伊人久久综合| 欧美日韩国产综合视频在线| 精品二区视频| 亚洲欧美综合国产精品一区| 91久久精品美女高潮| 久久爱91午夜羞羞| 国产精品免费久久久久久| 亚洲欧洲一区二区在线观看| 久久露脸国产精品| 亚洲一区三区视频在线观看| 欧美区国产区| 亚洲精品一品区二品区三品区| 久久久久高清| 先锋影音国产一区| 国产精品久久久久久久久借妻 | 国产一区二区0| 欧美一区二区大片| 一区二区三区视频在线| 欧美女主播在线| 日韩亚洲成人av在线| 欧美激情亚洲激情| 老司机午夜精品视频| 永久免费视频成人| 麻豆精品91| 久久裸体艺术| 在线看片成人| 暖暖成人免费视频| 久久亚洲一区| 亚洲电影观看| 欧美国产亚洲另类动漫| 久久综合九九| 亚洲人成啪啪网站| 亚洲国产一区二区在线| 欧美电影免费观看| 99ri日韩精品视频| 亚洲精品一区在线观看| 欧美日韩国产在线| 中文av一区特黄| 亚洲视频你懂的| 国产视频亚洲精品| 免费观看成人| 欧美成人午夜77777| 在线视频精品一区| 亚洲一区日韩| 韩日欧美一区二区三区| 欧美激情欧美激情在线五月| 欧美精品尤物在线| 亚洲欧美日韩天堂| 久久精品麻豆| 亚洲黄色免费电影| 一本色道久久88综合亚洲精品ⅰ| 国产精品久久激情| 久久天天躁狠狠躁夜夜av| 免费国产一区二区| 亚洲午夜视频| 欧美一区二区在线看| 91久久在线播放| 99视频精品| 国产自产高清不卡| 亚洲黄色一区| 国产欧美69| 最新成人av网站| 国产午夜精品久久| 亚洲国产高清在线观看视频| 国产精品国产三级国产专区53 | 在线视频中文亚洲|