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

積木

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 閱讀(227) 評論(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>
            浪潮色综合久久天堂| 亚洲一区二区三区在线观看视频| 欧美亚洲系列| 香蕉久久一区二区不卡无毒影院| 国产日韩欧美中文在线播放| 老司机精品视频网站| 欧美成人综合在线| 亚洲先锋成人| 久久动漫亚洲| 99热免费精品在线观看| 亚洲小说欧美另类社区| 在线观看视频日韩| 99re在线精品| 国产一区亚洲| 亚洲美女诱惑| 国模套图日韩精品一区二区| 亚洲黄色有码视频| 国产精品蜜臀在线观看| 免费观看成人网| 欧美日韩中文字幕综合视频| 久久婷婷国产综合精品青草| 欧美伦理91| 美女在线一区二区| 欧美新色视频| 亚洲国产裸拍裸体视频在线观看乱了| 国产精品黄色| 亚洲国产视频一区二区| 国产欧美日韩在线观看| 亚洲精品国产品国语在线app| 国产亚洲一本大道中文在线| 日韩视频第一页| 亚洲高清精品中出| 欧美影院久久久| 亚洲在线播放| 欧美夫妇交换俱乐部在线观看| 欧美尤物一区| 国产精品v片在线观看不卡| 欧美激情综合色| 国内精品久久久久久久影视蜜臀| 亚洲私人影院在线观看| 亚洲伦理网站| 久热精品视频在线免费观看| 久久国产99| 国产精品一区二区三区四区五区| 日韩小视频在线观看| 91久久精品国产91久久性色tv| 久久xxxx| 久久av二区| 国产精品日日摸夜夜添夜夜av| 99热在线精品观看| 99精品欧美一区二区三区| 免费精品视频| 亚洲高清不卡在线观看| 最新成人av网站| 美女网站久久| 欧美激情一区二区三区成人| 亚洲国产婷婷| 欧美va天堂在线| 亚洲国产91精品在线观看| 亚洲级视频在线观看免费1级| 久久综合九色欧美综合狠狠| 欧美激情一区二区三区蜜桃视频 | 99国产精品一区| 亚洲精品字幕| 欧美日韩国产综合视频在线观看中文 | 国产一区二区日韩| 久久国产欧美| 欧美成人精品三级在线观看| 亚洲国产精品视频一区| 欧美激情在线狂野欧美精品| 日韩视频免费在线| 午夜精品久久久久影视| 国产手机视频一区二区| 久久亚洲综合| 亚洲九九爱视频| 午夜免费日韩视频| 国内精品久久久久久影视8| 久久婷婷色综合| 亚洲精品日韩精品| 久久av一区| 亚洲成在人线av| 欧美日韩一区二| 亚洲欧美日韩精品久久亚洲区 | 久久综合九色九九| 亚洲精品在线电影| 国产精品香蕉在线观看| 久久夜色精品国产| 99国产精品私拍| 狂野欧美激情性xxxx| 一区二区三区|亚洲午夜| 国产欧美一区二区三区在线看蜜臀 | 欧美影院视频| 亚洲激情第一区| 国产精品视频久久一区| 久久亚洲免费| 亚洲视频导航| 欧美激情aaaa| 欧美一乱一性一交一视频| 亚洲第一精品夜夜躁人人爽| 国产精品九九| 欧美 日韩 国产精品免费观看| 亚洲视屏一区| 亚洲福利专区| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲色图自拍| 亚洲国产免费| 国产综合色精品一区二区三区| 欧美日韩大片一区二区三区| 久久久欧美一区二区| 亚洲一区二区三区精品在线| 亚洲福利视频网站| 久久综合国产精品| 欧美专区第一页| 正在播放欧美视频| 亚洲欧洲精品一区| 伊人久久婷婷色综合98网| 国产精品久久久久9999吃药| 欧美激情按摩在线| 久久亚洲午夜电影| 欧美在线免费看| 亚洲欧美日韩国产成人精品影院| 亚洲人成高清| 欧美激情精品久久久久久| 久久一区中文字幕| 久久国产精品免费一区| 性色一区二区| 销魂美女一区二区三区视频在线| 亚洲午夜极品| 亚洲视频在线看| 一本色道综合亚洲| 99精品国产高清一区二区| 亚洲精品美女在线观看| 亚洲人久久久| 亚洲精品在线观看视频| 亚洲精品日韩综合观看成人91| 亚洲国产裸拍裸体视频在线观看乱了 | 国产精品美女一区二区| 国产精品久久久久一区二区| 欧美系列电影免费观看| 欧美三级欧美一级| 国产精品裸体一区二区三区| 国产精品男女猛烈高潮激情| 国产精品亚洲不卡a| 国产欧亚日韩视频| 狠狠色狠狠色综合人人| 在线观看欧美日韩国产| 亚洲国产高清视频| 日韩午夜电影在线观看| 亚洲一区二区在线看| 欧美一级欧美一级在线播放| 久久成人精品无人区| 麻豆视频一区二区| 亚洲激情第一区| 一本色道久久99精品综合| 亚洲图片在区色| 欧美在线视频观看| 欧美~级网站不卡| 欧美日韩日本国产亚洲在线| 国产精品视频在线观看| 好吊色欧美一区二区三区四区 | 夜夜嗨av一区二区三区四区| 亚洲一区亚洲二区| 久久久久在线观看| 欧美激情一区二区三区全黄| 亚洲乱码精品一二三四区日韩在线| 亚洲视频在线二区| 久久深夜福利免费观看| 欧美日本高清| 国产一区三区三区| 夜夜爽夜夜爽精品视频| 午夜在线观看免费一区| 欧美大片免费| 亚洲免费小视频| 欧美大片18| 国产婷婷一区二区| 日韩一级欧洲| 麻豆久久精品| 亚洲一区在线观看免费观看电影高清| 久久精品一区二区| 国产精品xxxav免费视频| 依依成人综合视频| 亚洲欧美韩国| 亚洲国产精品专区久久| 久久国产精品毛片| 国产精品毛片在线看| 亚洲日本中文| 久久综合久色欧美综合狠狠| 在线一区欧美| 欧美国产日韩一区二区| 国产一区在线播放| 亚洲免费在线视频一区 二区| 亚洲大胆人体视频| 久久国产视频网站| 国产精品露脸自拍| 999在线观看精品免费不卡网站| 老司机免费视频一区二区| 亚洲免费视频网站| 国产精品福利久久久| 在线视频欧美日韩精品| 亚洲经典在线|