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

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 閱讀(2084) 評論(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中的各個指針就可以了~  回復  更多評論
  


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   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>
            国产午夜精品一区二区三区欧美| 欧美精品在线极品| 国产欧美韩日| 午夜老司机精品| 午夜精品久久久| 国产三级欧美三级| 麻豆精品传媒视频| 欧美激情免费在线| 亚洲一区二区视频在线观看| 亚洲视频一区在线| 国产亚洲精品久久久久动| 久久久777| 欧美高清视频在线观看| 一区二区三区四区五区精品| 亚洲一区尤物| 在线成人h网| 91久久中文字幕| 国产精品国色综合久久| 久久久久久**毛片大全| 欧美va天堂va视频va在线| 亚洲先锋成人| 久久久福利视频| 中国女人久久久| 欧美一级专区| 99视频热这里只有精品免费| 亚洲欧美激情精品一区二区| 亚洲黄色免费| 亚洲校园激情| 亚洲精品美女91| 亚洲欧美日韩精品在线| 亚洲精选中文字幕| 欧美一区2区三区4区公司二百| 亚洲欧洲在线一区| 性xx色xx综合久久久xx| 一区二区欧美精品| 久久精品一区二区三区四区| 亚洲视频第一页| 玖玖玖国产精品| 久久国产一区二区三区| 欧美日韩成人综合| 欧美 日韩 国产精品免费观看| 国产精品高清在线观看| 亚洲成色777777女色窝| 国产综合色在线| 亚洲午夜一二三区视频| 日韩视频国产视频| 久久亚洲欧美| 久久精品视频播放| 欧美性色视频在线| 亚洲人成在线观看网站高清| 一区二区三区在线视频免费观看 | 国产精品主播| 91久久极品少妇xxxxⅹ软件| 国模私拍一区二区三区| 亚洲一区激情| 亚洲欧美久久久| 欧美日韩第一区日日骚| 亚洲第一精品电影| 尤物精品国产第一福利三区 | 亚洲高清视频中文字幕| 国产视频一区在线观看一区免费 | 欧美中文在线字幕| 国产精品国产三级欧美二区| 亚洲美女免费精品视频在线观看| 91久久夜色精品国产九色| 久久久久久网址| 久久躁日日躁aaaaxxxx| 激情六月婷婷综合| 久久精品免视看| 麻豆精品视频在线| 亚洲国产高清视频| 免费观看成人网| 亚洲福利久久| 一个色综合导航| 欧美日韩成人在线播放| 日韩午夜电影在线观看| 亚洲午夜91| 国产精品欧美日韩| 午夜精品久久99蜜桃的功能介绍| 欧美制服丝袜第一页| 国内精品久久国产| 久久亚洲精品一区二区| 亚洲国产视频a| 在线一区二区日韩| 国产乱码精品一区二区三区忘忧草 | 欧美一级一区| 国内精品久久久| 免费不卡中文字幕视频| 亚洲精品乱码久久久久久蜜桃91| 一区二区三区精品视频在线观看| 国产精品成人午夜| 久久gogo国模裸体人体| 亚洲成人在线网站| 亚洲在线第一页| 国内精品一区二区三区| 欧美jjzz| 亚洲在线一区二区| 久久亚洲精品一区| 一本色道久久综合狠狠躁篇怎么玩| 欧美天天视频| 久久精品国亚洲| 亚洲乱码久久| 久久久久久一区| 99在线观看免费视频精品观看| 国产精品国产三级国产| 久久久久免费观看| 一区二区三区欧美亚洲| 免费观看亚洲视频大全| 亚洲一二三四久久| 黑人巨大精品欧美一区二区| 欧美日韩视频在线一区二区观看视频 | 久久免费视频网| 一区二区三区产品免费精品久久75| 国产情人节一区| 欧美精品福利视频| 久久精品国产亚洲一区二区| 日韩午夜黄色| 欧美成人精品福利| 久久精品国产清高在天天线| 一本色道久久综合亚洲精品小说 | 欧美精品999| 欧美在线视频a| 亚洲午夜电影| 亚洲精品少妇网址| 女人天堂亚洲aⅴ在线观看| 欧美一级黄色网| 中文亚洲欧美| 99国产精品视频免费观看| 一区精品久久| 国产精品一区二区久久久久| 欧美日韩www| 欧美aⅴ一区二区三区视频| 久久成人精品| 欧美亚洲专区| 亚洲一区二区三区涩| 日韩午夜精品视频| 亚洲精品日韩激情在线电影| 亚洲国产欧美不卡在线观看| 蜜桃伊人久久| 欧美成人免费在线视频| 久久综合亚州| 蜜臀av国产精品久久久久| 久久久久国色av免费看影院| 久久不射网站| 久久九九热免费视频| 久久狠狠亚洲综合| 久久精品毛片| 久久综合一区二区| 欧美高清在线观看| 欧美韩日一区二区三区| 欧美国产精品va在线观看| 欧美成人69av| 亚洲国产精品毛片| 亚洲精品日韩精品| 亚洲四色影视在线观看| 亚洲尤物视频网| 欧美一站二站| 久久精品日韩欧美| 蜜臀av一级做a爰片久久| 男人天堂欧美日韩| 欧美日韩福利在线观看| 国产精品qvod| 国产一区二区三区四区hd| 极品尤物av久久免费看| 亚洲三级免费电影| 亚洲午夜视频在线观看| 欧美中文字幕在线视频| 久久视频一区| 亚洲日本欧美| 亚洲免费综合| 久久综合福利| 欧美天堂亚洲电影院在线观看| 国产乱码精品一区二区三区忘忧草| 国内外成人免费激情在线视频 | 欧美国产精品人人做人人爱| 欧美日韩免费一区二区三区| 国产精品视频一二三| 1000部精品久久久久久久久| 国产精品99久久久久久www| 久久se精品一区精品二区| 蜜桃av噜噜一区| 99热在这里有精品免费| 久久国产高清| 欧美日韩一区三区| 国产一区在线视频| 99热这里只有精品8| 久久久噜噜噜久久| 99国产精品自拍| 久久久久久久综合| 国产精品久久久久秋霞鲁丝 | 欧美国产亚洲视频| 国产欧美日韩综合一区在线播放| 91久久久在线| 久久精品日产第一区二区| 亚洲日本va午夜在线电影| 久久超碰97中文字幕| 欧美三级视频在线播放| 亚洲国产精品久久久久久女王| 亚洲欧美在线aaa| 亚洲人成毛片在线播放|