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

emptysoul

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

常用鏈接

留言簿(18)

我參與的團(tuán)隊(duì)

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

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

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


實(shí)現(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("時(shí)事新聞"));
    pMenu
->Add(new SubMenu("社會(huì)新聞"));
    pMenu
->Display();
    pMenu 
= new CompositMenu("國際新聞");
    pMenu
->Add(new SubMenu("國際要聞"));
    pMenu
->Add(new SubMenu("環(huán)球視野"));
    pMenu
->Display();

    
return 0;
}

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

Feedback

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

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

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

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


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(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久久久久久www| 欧美精品自拍偷拍动漫精品| 亚洲精品视频免费| 亚洲激情婷婷| 欧美日韩国产综合在线| 亚洲视频在线观看一区| 一区二区不卡在线视频 午夜欧美不卡在| 免费看精品久久片| 在线亚洲激情| 先锋影音久久久| 在线观看国产欧美| 亚洲欧洲在线播放| 国产精品外国| 欧美+日本+国产+在线a∨观看| 久久久免费精品视频| 亚洲精品久久| 亚洲婷婷在线| 在线观看欧美精品| 日韩午夜电影| 韩国精品久久久999| 91久久精品国产91久久| 国产精品男gay被猛男狂揉视频| 久久人91精品久久久久久不卡| 久久亚洲免费| 亚洲欧美资源在线| 美日韩精品视频| 午夜日韩视频| 欧美精品一区二区三区视频| 午夜一级在线看亚洲| 久久―日本道色综合久久| 一二三区精品| 麻豆成人综合网| 欧美在线视频免费播放| 免播放器亚洲| 久久久久久久精| 欧美日韩国产999| 开元免费观看欧美电视剧网站| 欧美日韩一区二区视频在线观看| 久久久久久亚洲精品中文字幕| 欧美福利视频在线| 老司机一区二区三区| 国产精品视频观看| 亚洲精品免费网站| 在线观看欧美日韩国产| 亚洲一区二区成人在线观看| 亚洲日本中文| 噜噜噜噜噜久久久久久91| 欧美一区二区三区成人| 欧美日本精品一区二区三区| 免费观看成人网| 韩国v欧美v日本v亚洲v| 亚洲欧美激情一区二区| 亚洲永久免费av| 欧美日韩1080p| 亚洲高清免费视频| 在线日韩欧美| 久久艳片www.17c.com| 久久久91精品国产一区二区三区| 国产精品视频第一区| 日韩一级免费观看| 亚洲一级黄色片| 欧美日韩精品欧美日韩精品一| 亚洲大胆在线| 亚洲精品日韩欧美| 免费看的黄色欧美网站| 亚洲福利免费| 日韩系列欧美系列| 欧美伦理一区二区| 亚洲精选国产| 亚洲一区二区三区激情| 国产精品v日韩精品| 一区二区三区偷拍| 亚洲欧美精品在线观看| 国产欧美精品va在线观看| 亚洲欧美激情一区二区| 久久久久久久久久码影片| 国产亚洲精品bv在线观看| 欧美中文在线观看国产| 美女国内精品自产拍在线播放| 一区二区在线视频观看| 免费成人av| 日韩视频免费在线| 亚洲欧美自拍偷拍| 黑人巨大精品欧美一区二区| 久久先锋资源| 99ri日韩精品视频| 欧美在线一级视频| 在线观看中文字幕不卡| 欧美精品免费在线观看| 一区二区三区久久精品| 久久九九热免费视频| 亚洲国产视频一区二区| 欧美日韩亚洲精品内裤| 欧美亚洲在线视频| 欧美激情一区二区久久久| 亚洲午夜视频在线观看| 国产女优一区| 欧美aⅴ一区二区三区视频| 99在线视频精品| 久久久亚洲高清| 9久re热视频在线精品| 国产欧美大片| 欧美激情小视频| 午夜精品在线| 亚洲黄色天堂| 久久成人精品电影| 亚洲美女中文字幕| 国产日韩欧美中文在线播放| 美女性感视频久久久| 亚洲主播在线播放| 亚洲国产精品嫩草影院| 久久久国际精品| 亚洲一区欧美二区| 亚洲国产精品尤物yw在线观看| 国产精品久久久久久五月尺| 久久香蕉国产线看观看网| 亚洲一区亚洲| 日韩一级片网址| 亚洲高清一区二| 久久久在线视频| 午夜精品免费在线| 夜夜精品视频| 亚洲精品一区二区三区不| 韩日欧美一区二区三区| 国产精品v一区二区三区| 欧美成人午夜| 老司机一区二区三区| 久久riav二区三区| 亚洲一区二区三区高清不卡| 亚洲精品乱码久久久久| 欧美高清不卡在线| 蜜臀av性久久久久蜜臀aⅴ| 欧美伊久线香蕉线新在线| 亚洲私人影院| 中国av一区| 亚洲天堂成人在线观看| 日韩视频在线播放| 亚洲精品国产精品国自产在线 | 欧美激情精品久久久久久免费印度| 先锋影音网一区二区| 亚洲欧美日韩中文视频| 一区二区三区 在线观看视| 亚洲精品影院在线观看| 亚洲激情在线| 亚洲精品中文字幕在线观看| 亚洲国产精品高清久久久| 欧美91大片| 欧美激情视频免费观看| 亚洲国产高清视频| 亚洲黄色三级| 日韩视频第一页| 一区二区三区欧美| 亚洲男人的天堂在线| 亚洲欧美国产视频| 欧美一区激情| 老司机67194精品线观看| 麻豆精品视频在线观看| 欧美成人亚洲成人日韩成人| 欧美高清在线| 欧美视频中文字幕| 国产欧美日韩高清| 精久久久久久| 亚洲免费观看视频| 亚洲一区二区三区国产| 午夜久久一区| 免费久久99精品国产| 亚洲国产日韩在线一区模特| 日韩天堂av| 久久不射2019中文字幕| 欧美成人免费va影院高清| 欧美久久久久久久久| 国产精品视频内| 亚洲第一主播视频| 亚洲综合精品自拍| 久久久久久久综合狠狠综合| 欧美激情区在线播放| 一区二区三区欧美日韩| 久久精品日产第一区二区| 欧美女同在线视频| 国产视频精品免费播放| 亚洲精品国产日韩| 欧美一级精品大片| 亚洲高清免费| 欧美中文字幕在线| 欧美色区777第一页| 国产在线精品成人一区二区三区| 亚洲另类黄色| 久久噜噜噜精品国产亚洲综合| 亚洲啪啪91| 久久九九精品| 国产精品免费看| 亚洲免费观看视频| 久久综合九色综合久99| 99综合精品| 欧美精品大片| 亚洲国产精品视频| 久久九九精品99国产精品| 一区二区三区久久久|