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

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>
            欧美在线在线| 久久一二三国产| 一本综合久久| 欧美视频在线免费看| 亚洲一区二区三区在线| 亚洲一区二区av电影| 国产欧美午夜| 免费不卡亚洲欧美| 欧美激情偷拍| 午夜精品久久久久| 性亚洲最疯狂xxxx高清| 亚洲大胆美女视频| 亚洲老板91色精品久久| 国产精品理论片在线观看| 久久激情视频免费观看| 美女精品国产| 亚洲欧美精品一区| 久久精品99国产精品| 日韩视频一区二区在线观看 | 欧美大片一区二区| 亚洲永久精品国产| 久久国产精品网站| 一区二区三区日韩精品视频| 亚洲午夜在线观看| 在线色欧美三级视频| 日韩视频国产视频| 伊人狠狠色j香婷婷综合| 日韩视频免费在线| 国产毛片一区| 91久久久一线二线三线品牌| 国产精品女主播| 欧美激情精品久久久久久黑人| 国产精品成人一区二区网站软件| 久久精品夜色噜噜亚洲aⅴ| 欧美激情免费观看| 久久久久久久久久码影片| 欧美日韩国语| 欧美大片一区二区三区| 国产农村妇女精品一二区| 亚洲国产三级| 在线播放日韩专区| 亚洲综合国产| 在线亚洲一区| 欧美成人自拍视频| 久久偷看各类wc女厕嘘嘘偷窃| 欧美日韩色婷婷| 欧美fxxxxxx另类| 国产欧美短视频| a4yy欧美一区二区三区| 亚洲欧洲综合另类| 久久精品一区二区三区四区 | 国产精品尤物| 99在线观看免费视频精品观看| 亚洲国产mv| 久久久久久久久伊人| 久久国产夜色精品鲁鲁99| 国产精品久久久久久久久免费桃花| 欧美高潮视频| 亚洲国产日韩欧美综合久久| 久久精品麻豆| 蜜臀久久99精品久久久久久9| 国产日本精品| 久久av免费一区| 久久久久国产成人精品亚洲午夜| 国产精品日韩久久久| 亚洲午夜精品久久久久久浪潮| 一区二区成人精品| 欧美日韩亚洲激情| 一区二区三区偷拍| 午夜久久资源| 国产亚洲精品资源在线26u| 午夜视频在线观看一区| 久久久www成人免费精品| 国产无遮挡一区二区三区毛片日本| 亚洲主播在线| 久久久久国产精品午夜一区| 国产综合色一区二区三区| 久久精品国产亚洲高清剧情介绍| 欧美在线综合视频| 一区二区三区在线免费观看| 久久一区二区三区四区| 欧美激情精品| 亚洲一区免费在线观看| 国产精品麻豆成人av电影艾秋| 亚洲图片欧美午夜| 久久久久久伊人| 亚洲日本中文字幕区| 欧美日本亚洲| 亚洲一区中文| 麻豆九一精品爱看视频在线观看免费 | 免费欧美日韩国产三级电影| 亚洲国产日韩一级| 欧美日韩国产成人在线观看| 亚洲一区二区三区精品动漫| 久久蜜桃香蕉精品一区二区三区| 一色屋精品视频在线看| 欧美美女视频| 欧美一区二区免费| 亚洲国产精品精华液2区45| 亚洲午夜日本在线观看| 国产一区二区三区久久 | 这里只有精品电影| 国产夜色精品一区二区av| 噜噜噜在线观看免费视频日韩| 日韩视频不卡中文| 久久综合狠狠综合久久综合88| 亚洲精品午夜| 国产亚洲精品福利| 欧美另类videos死尸| 午夜影视日本亚洲欧洲精品| 欧美激情一二三区| 欧美在线视频观看免费网站| 亚洲日本成人在线观看| 国产日韩欧美精品一区| 欧美精品一区二区在线观看 | 欧美岛国在线观看| 午夜激情亚洲| 亚洲久久在线| 国产综合久久久久久鬼色| 欧美三区视频| 欧美成人精品影院| 久久精品欧美日韩| 亚洲综合丁香| 中文av一区特黄| 最新成人av在线| 欧美 日韩 国产在线| 久久激情久久| 翔田千里一区二区| 亚洲一区二区三区免费观看| 亚洲三级免费观看| 亚洲福利视频二区| 极品少妇一区二区三区| 国产精品视频免费在线观看| 欧美日韩在线大尺度| 欧美—级高清免费播放| 美国十次成人| 老司机午夜精品视频在线观看| 欧美一区二区在线视频| 性久久久久久| 午夜精品视频在线| 午夜精品在线看| 午夜在线视频观看日韩17c| 亚洲午夜黄色| 亚洲香蕉成视频在线观看| 一区二区三区视频在线观看| 一区二区高清视频在线观看| 亚洲精品视频中文字幕| 99国产精品自拍| 亚洲婷婷综合色高清在线| 在线视频你懂得一区| 亚洲六月丁香色婷婷综合久久| 亚洲欧洲日韩在线| 亚洲免费观看| 亚洲婷婷国产精品电影人久久| 这里只有视频精品| 亚洲影院免费| 欧美在线观看视频一区二区三区 | av成人天堂| 亚洲自拍偷拍一区| 香港久久久电影| 久久精品久久99精品久久| 久久综合影音| 欧美精品亚洲| 国产精品视频免费一区| 国产视频一区免费看| 在线免费观看视频一区| 最近中文字幕日韩精品| 在线综合亚洲欧美在线视频| 亚洲欧美电影院| 久久青草欧美一区二区三区| 欧美激情一区二区久久久| 99爱精品视频| 久久精品国产免费看久久精品| 牛牛影视久久网| 国产精品草莓在线免费观看| 国产乱码精品1区2区3区| 亚洲高清二区| 亚洲永久免费视频| 麻豆精品视频在线观看| 99国内精品久久| 久久精品人人做人人爽电影蜜月| 欧美精品二区三区四区免费看视频| 欧美性jizz18性欧美| 在线日韩一区二区| 亚洲欧美日韩国产一区二区三区 | 亚洲电影免费观看高清完整版在线| 99精品欧美一区二区蜜桃免费| 新67194成人永久网站| 欧美成人一品| 国产一区二区三区精品久久久| 亚洲最黄网站| 欧美成人四级电影| 亚洲女爱视频在线| 欧美日韩高清在线| 在线观看精品一区| 久久精品国产2020观看福利| 亚洲精品乱码久久久久久日本蜜臀| 欧美一区二区在线播放| 欧美午夜视频在线| 日韩一级网站|