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

emptysoul

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

常用鏈接

留言簿(18)

我參與的團(tuán)隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

組合模式(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 閱讀(2081) 評論(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>
            欧美+亚洲+精品+三区| 欧美亚州在线观看| 欧美成人在线网站| 免费欧美高清视频| 欧美福利影院| 亚洲国产精品专区久久| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲美女区一区| 亚洲精品在线观| 亚洲影院免费| 久久香蕉国产线看观看av| 欧美寡妇偷汉性猛交| 亚洲主播在线播放| 亚洲精品一级| 亚洲国产精品女人久久久| 亚洲第一精品夜夜躁人人躁| 亚洲激情综合| 亚洲欧美视频| 免费日韩一区二区| 国产精品二区三区四区| 好吊妞**欧美| 午夜精品国产| 欧美电影资源| 亚洲欧美激情视频在线观看一区二区三区 | 暖暖成人免费视频| 国产精品美女久久久浪潮软件| 国产香蕉久久精品综合网| 亚洲激情啪啪| 久久精品官网| 日韩亚洲精品电影| 欧美va亚洲va日韩∨a综合色| 国产伦精品一区二区三区免费| 亚洲精选大片| 欧美成人精品| 久久激五月天综合精品| 欧美午夜影院| 一区二区高清在线观看| 欧美激情第4页| 久久久久久久高潮| 国产精品一区二区女厕厕| 亚洲精品美女免费| 免费高清在线一区| 久久国产天堂福利天堂| 国产欧美精品va在线观看| 一区二区av| 91久久精品一区二区别| 毛片一区二区| 亚洲高清不卡av| 免费日韩一区二区| 久久国产免费| 国产一区二区高清视频| 欧美一区日韩一区| 亚洲综合导航| 国产精品视频你懂的| 亚洲欧美日韩精品久久奇米色影视| 亚洲欧洲精品一区二区精品久久久| 久久久99国产精品免费| 激情五月婷婷综合| 久久中文字幕导航| 久久久久se| 亚洲成人原创| 亚洲成色www久久网站| 欧美不卡激情三级在线观看| 亚洲国产一区二区视频| 亚洲高清在线观看一区| 欧美肥婆在线| aa成人免费视频| 夜夜爽www精品| 国产欧美不卡| 欧美视频久久| 久久精品亚洲精品国产欧美kt∨| 亚洲老板91色精品久久| 欧美精品精品一区| 亚洲视频在线观看网站| 夜夜嗨一区二区| 国产伦精品一区二区| 久久亚洲综合色一区二区三区| 久久综合网色—综合色88| 日韩视频免费看| 亚洲中无吗在线| 在线观看91精品国产麻豆| 亚洲狠狠丁香婷婷综合久久久| 欧美日韩在线亚洲一区蜜芽 | 亚洲最黄网站| 中文网丁香综合网| 国产日韩亚洲欧美精品| 欧美电影在线观看| 欧美日韩天天操| 久久精品一本久久99精品| 米奇777在线欧美播放| 亚洲欧美精品在线观看| 久久精品国产在热久久 | 久久久伊人欧美| 亚洲第一伊人| 亚洲激情在线观看| 国产精品男女猛烈高潮激情| 欧美aaa级| 国产精品久久久久秋霞鲁丝 | 小处雏高清一区二区三区| 久久av一区二区三区漫画| 日韩午夜精品视频| 久久狠狠亚洲综合| 亚洲一区二区三区影院| 美女黄色成人网| 久久电影一区| 欧美日本一道本| 美女视频黄免费的久久| 国产欧美一区二区白浆黑人| 亚洲日本aⅴ片在线观看香蕉| 国产亚洲精品自拍| 中日韩美女免费视频网址在线观看| 在线日韩欧美视频| 欧美在线一级视频| 西西裸体人体做爰大胆久久久| 欧美国产日韩视频| 免费久久精品视频| 国产一区二区三区日韩欧美| 一区二区三区福利| 一本色道久久88综合亚洲精品ⅰ| 另类欧美日韩国产在线| 久久久青草婷婷精品综合日韩| 国产精品任我爽爆在线播放| 日韩午夜电影在线观看| 亚洲日本aⅴ片在线观看香蕉| 久久久亚洲一区| 欧美成人激情在线| 亚洲国产二区| 男男成人高潮片免费网站| 欧美电影电视剧在线观看| 亚洲天堂成人在线观看| 欧美激情欧美狂野欧美精品| 蜜桃久久av| 精品69视频一区二区三区| 亚洲影视中文字幕| 亚洲欧美日韩网| 国产毛片一区| 欧美一区二区三区成人 | 亚洲开发第一视频在线播放| 亚洲电影视频在线| 免费亚洲网站| 亚洲精品中文字幕在线| 亚洲视频视频在线| 国产精品区一区二区三| 欧美在线不卡| 老鸭窝91久久精品色噜噜导演| 在线免费观看成人网| 欧美大片免费观看在线观看网站推荐| 亚洲高清不卡在线观看| 一区二区三欧美| 国产精品入口麻豆原神| 久久gogo国模裸体人体| 欧美福利网址| 亚洲欧美日韩爽爽影院| 国产一区二区中文| 欧美成人免费全部观看天天性色| 99ri日韩精品视频| 欧美一区二区大片| 1769国内精品视频在线播放| 欧美国产视频日韩| 亚洲欧美在线观看| 欧美成人资源网| 亚洲午夜国产一区99re久久| 国产欧美一区二区三区久久人妖 | 国产乱人伦精品一区二区| 久久国产欧美精品| 日韩视频一区二区三区在线播放免费观看| 亚洲小说春色综合另类电影| 国产视频一区欧美| 欧美精品一区二区蜜臀亚洲| 亚洲五月婷婷| 欧美freesex8一10精品| 亚洲网站在线播放| 韩国亚洲精品| 欧美色综合网| 久久资源在线| 亚洲影院污污.| 亚洲国产精品久久91精品| 午夜精品在线视频| 亚洲美女色禁图| 国产一区二区你懂的| 欧美日本高清一区| 久久九九99视频| 亚洲少妇中出一区| 亚洲国产精品一区二区www在线| 性欧美1819sex性高清| 野花国产精品入口| 亚洲国产一区二区三区高清| 国产视频亚洲| 国产免费观看久久| 欧美日韩午夜激情| 欧美成人免费小视频| 欧美怡红院视频| 亚洲一区二区视频在线| 亚洲精选在线观看| 91久久久国产精品| 亚洲国产日韩在线| 欧美激情视频在线免费观看 欧美视频免费一| 午夜精品在线观看| 亚洲男人的天堂在线aⅴ视频| 999亚洲国产精|