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

積木

No sub title

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  140 Posts :: 1 Stories :: 11 Comments :: 0 Trackbacks

常用鏈接

留言簿(1)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

轉載自:http://patmusing.blog.163.com/blog/static/135834960201002321018760/


在面向對象的系統中,我們經常會遇到一類具有
容器特征的對象,即它們在充當對象的同時,又是其他對象的容器。

舉例:

在操作系統中,文件的概念很廣泛,其中文件可以是普通文件,也可以是目錄(Unix中,設備也是文件),目錄中可以存放文件。Composite設計模式就是將客戶代碼與復雜的對象容器結構解耦,讓對象容器自己來實現自身的復雜結構,從而使得客戶代碼就像處理簡單對象(文件)一樣來處理復雜的對象容器(目錄)

“Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.” – GoF

10. C++實現Structural - Composite模式 - 玄機逸士 - 玄機逸士博客

調用Directory類對象的process函數,和調用PhysicalFile類對象的process一樣簡單。

從上面的UML類圖中,可以看出DirectoryFile這兩個類之間的關系:

1. Directory “is a”File

2. Directory “has a(more)” File

這是典型的遞歸結構。因此在處理遞歸問題時,如果必要,可以考慮采用Composite模式。后面要講到的Decorator模式也是如此。

// Composite.h

#include <iostream>

#include <list>

using namespace std;

class File

{

public:

virtual void process() = 0;

// 虛函數:增加一個文件

virtual void add(File* file)

{

}

// 虛函數:刪除一個文件

virtual void remove(File* file)

{

}

public:

virtual ~File()

{

cout << "in the destructor of File..." << endl;

}

};

// 葉子節點

class PhysicalFile : public File

{

public:

void process()

{

cout << "process() in PhysicalFile..." << endl;

}

public:

~PhysicalFile()

{

cout << "in the destructor of PhysicalFile..." << endl;

}

};

// 容器節點:Composite節點

class Directory : public File

{

private:

list<File*> file_list;

public:

Directory()

{

}

void process()

{

cout << "process() in Directory..." << endl;

if(!file_list.empty())

{

for(list<File*>::iterator it = file_list.begin(); it != file_list.end(); it++)

{

File* f = *it;

f->process();

}

}

}

void add(File* file)

{

file_list.push_back(file);

}

void remove(File* file)

{

file_list.remove(file);

}

public:

~Directory()

{

cout << "in the destructor of Directory..." << endl;

}

};

// Composite.cpp

#include "Composite.h"

int main(int argc, char **argv)

{

File *f1 = new Directory;

File *f2 = new Directory;

File *f3 = new PhysicalFile;

f2->add(f3);

f1->add(f2);

File *f4 = new Directory;

File *f5 = new Directory;

File *f6 = new Directory;

File *f7 = new PhysicalFile;

f6->add(f7);

f5->add(f6);

f4->add(f5);

f1->add(f4);

f1->process();

f1->remove(f4);

cout << "+++++++++++++++++++++++" << endl;

f1->process();

// STL container中的元素是指針對象,那么必須手動刪除。

delete f1;

delete f2;

delete f3;

delete f4;

delete f5;

delete f6;

delete f7;

return 0;

}

上述程序中,各對象之間的關系如下圖:

10. C++實現Structural - Composite模式 - 玄機逸士 - 玄機逸士博客

其中f3f7PhysicalFile對象。f1包含了f2f4f2包含了f3f4包含了f5f5包含了f6f6包含了f7

運行結果如下:

process() in Directory... // f1

process() in Directory... // f2

process() in PhysicalFile... // f3

process() in Directory... // f4

process() in Directory... // f5

process() in Directory... // f6

process() in PhysicalFile... // f7

+++++++++++++++++++++++ // 刪除f4后的輸出(可以看到f4及其包含的對象全部被刪除了)

process() in Directory... // f1

process() in Directory... // f2

process() in PhysicalFile... // f3

in the destructor of Directory...

in the destructor of File...

in the destructor of Directory...

in the destructor of File...

in the destructor of PhysicalFile...

in the destructor of File...

in the destructor of Directory...

in the destructor of File...

in the destructor of Directory...

in the destructor of File...

in the destructor of Directory...

in the destructor of File...

in the destructor of PhysicalFile...

in the destructor of File...



posted on 2013-03-07 22:33 Jacc.Kim 閱讀(232) 評論(0)  編輯 收藏 引用 所屬分類: 設計模式
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            影音先锋亚洲电影| 最新中文字幕亚洲| 亚洲永久免费精品| avtt综合网| 国产精品爱啪在线线免费观看| 日韩天堂在线观看| 亚洲精品看片| 欧美亚洲第一页| 欧美在线精品免播放器视频| 亚洲欧美欧美一区二区三区| 国产一区二区三区免费在线观看| 久久精品午夜| 免费成人在线视频网站| 91久久精品国产91久久性色tv | 欧美另类视频在线| 99视频一区二区| 亚洲午夜久久久久久久久电影院| 国产精品乱码一区二三区小蝌蚪| 久久精品国产久精国产思思| 久久久久久久国产| 一区二区欧美日韩| 亚洲欧美一区二区三区久久| 精品成人一区| 日韩视频在线一区| 国产亚洲综合精品| 欧美激情国产日韩精品一区18| 欧美日韩国产在线| 久久激情综合网| 欧美不卡激情三级在线观看| 亚洲一区二区在线| 久久久伊人欧美| 在线亚洲一区二区| 久久久国产成人精品| 亚洲精品韩国| 性欧美18~19sex高清播放| 亚洲国产精选| 午夜精品在线| 一区二区三区日韩| 久久三级视频| 欧美一区二区高清在线观看| 老牛影视一区二区三区| 欧美一级大片在线观看| 欧美国产日本韩| 久久精品国产精品| 欧美三级在线| 最新国产乱人伦偷精品免费网站| 国产欧美亚洲精品| 亚洲美女区一区| 亚洲国产网站| 久久精品视频在线免费观看| 一区二区成人精品| 欧美成人一区二区三区在线观看 | 国产日韩久久| 亚洲精品一区二区三区99| 精品51国产黑色丝袜高跟鞋| 亚洲视频电影在线| 日韩午夜av电影| 男人的天堂成人在线| 久久精品二区亚洲w码| 欧美三日本三级三级在线播放| 亚洲国产99| 亚洲欧洲三级| 免费观看成人鲁鲁鲁鲁鲁视频| 久久久久久综合| 国产一区二区三区直播精品电影 | 欧美一区二区在线观看| 一区二区三区毛片| 欧美精品乱人伦久久久久久| 欧美韩国在线| 亚洲国产片色| 美女图片一区二区| 欧美国产成人精品| 亚洲国产欧美在线| 欧美激情视频在线播放| 亚洲福利国产精品| 亚洲巨乳在线| 欧美日韩美女| aⅴ色国产欧美| 亚洲一区二区在线免费观看| 欧美日韩伦理在线免费| 中文久久精品| 欧美在线视频一区二区| 国产午夜精品福利| 久久久久免费| 亚洲黄色性网站| 在线中文字幕一区| 国产精品mm| 欧美在线日韩精品| 欧美www视频在线观看| 亚洲精品乱码久久久久久黑人| 欧美激情在线免费观看| 一区二区久久久久久| 欧美亚洲一区二区三区| 韩日精品视频一区| 欧美成人免费全部观看天天性色| 亚洲激情欧美激情| 欧美一级大片在线免费观看| 国产在线拍偷自揄拍精品| 久热精品在线视频| 在线亚洲电影| 老妇喷水一区二区三区| 9色国产精品| 国产亚洲精品久久久| 久久婷婷蜜乳一本欲蜜臀| 最新成人在线| 久久久久五月天| 99精品欧美| 极品尤物av久久免费看| 欧美国产精品久久| 亚洲女爱视频在线| 亚洲国产欧美在线| 久久www成人_看片免费不卡| 亚洲精选在线观看| 国产一区二区在线观看免费| 欧美金8天国| 欧美一区二区精品在线| 亚洲区一区二区三区| 久久精品视频免费观看| 亚洲网站在线| 亚洲国产一区二区三区a毛片| 国产精品日韩欧美| 欧美韩国在线| 久久午夜激情| 午夜在线精品偷拍| 国产精品99久久久久久久女警 | 亚洲精品在线免费观看视频| 国产欧美视频一区二区| 欧美日韩精品一本二本三本| 久久动漫亚洲| 亚洲欧美日本在线| 一区二区三区日韩精品| 亚洲第一精品影视| 免费看av成人| 久久一区二区三区四区五区| 亚洲综合大片69999| 亚洲精选久久| 亚洲三级免费| 91久久亚洲| 亚洲狠狠丁香婷婷综合久久久| 国产日韩欧美中文| 国产精品尤物福利片在线观看| 欧美乱大交xxxxx| 欧美91精品| 欧美暴力喷水在线| 另类激情亚洲| 免费观看成人www动漫视频| 久久久久国产精品www| 久久精品国产99国产精品| 羞羞答答国产精品www一本 | 亚洲国产二区| 亚洲第一综合天堂另类专| 欧美va亚洲va国产综合| 欧美成人国产va精品日本一级| 蜜臀久久99精品久久久画质超高清| 久久本道综合色狠狠五月| 久久国产精品毛片| 久久免费视频在线| 农村妇女精品| 亚洲激情视频在线| 亚洲欧洲日产国产网站| 日韩视频永久免费观看| 中文无字幕一区二区三区| 亚洲夜晚福利在线观看| 午夜国产一区| 久久视频免费观看| 欧美巨乳在线观看| 国产精品国产三级欧美二区| 国产精品伦子伦免费视频| 国产日韩精品在线观看| 在线欧美小视频| 亚洲精品激情| 亚洲欧美在线高清| 久久综合导航| 亚洲欧洲在线一区| 亚洲尤物视频在线| 麻豆91精品| 欧美日韩精品在线观看| 国产欧美日韩91| 亚洲国产成人av好男人在线观看| 日韩一级视频免费观看在线| 亚洲一区二区视频在线观看| 久久精品国产亚洲5555| 亚洲电影免费观看高清完整版在线观看| 亚洲日本中文| 亚洲综合电影| 欧美国产日韩精品| 国产欧美日韩91| 亚洲日本理论电影| 欧美影院在线播放| 亚洲激情在线播放| 欧美亚洲视频在线观看| 欧美国产在线电影| 国产一区再线| 亚洲一区二区三区777| 免费看成人av| 午夜一区在线| 欧美四级在线观看| 亚洲黄色成人久久久| 欧美在线一级视频| 日韩系列在线|