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

積木

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>
            国产精品黄色在线观看| 国外成人在线| 亚洲欧美日韩国产一区| 一区二区三区成人| 国产精品美女主播| 久久精品盗摄| 嫩草伊人久久精品少妇av杨幂| 亚洲日本久久| 日韩视频精品| 国产午夜精品麻豆| 欧美激情国产高清| 国产精品豆花视频| 久久久久久久尹人综合网亚洲| 久久久久国产精品一区| 99riav国产精品| 亚洲曰本av电影| 亚洲国产精品一区二区第一页 | 亚洲欧洲综合另类在线| 欧美中文字幕视频| 激情五月***国产精品| 亚洲国产日韩欧美| 国产目拍亚洲精品99久久精品 | 免费人成精品欧美精品| 欧美激情在线免费观看| 久久精品二区| 欧美片在线观看| 久久久久综合一区二区三区| 欧美日本免费| 蜜桃av一区二区| 国产精品免费一区二区三区在线观看| 久久久免费精品视频| 欧美乱大交xxxxx| 久久综合色影院| 国产精品久久一区二区三区| 欧美激情女人20p| 国产日产高清欧美一区二区三区| 亚洲成人中文| 狠狠综合久久| 午夜一区二区三区在线观看| 亚洲视频一区二区| 欧美成人一二三| 久久人人97超碰国产公开结果 | 欧美激情中文不卡| 久久综合狠狠| 国产日韩在线视频| 宅男噜噜噜66一区二区| 亚洲美女中出| 欧美v日韩v国产v| 老司机午夜精品| 国产亚洲精品美女| 亚洲欧美日韩一区二区在线 | 久久成人资源| 国产精品久久久久久久久久免费| 欧美激情亚洲一区| 在线播放国产一区中文字幕剧情欧美| 亚洲免费影视| 性做久久久久久免费观看欧美| 欧美视频在线观看一区二区| 亚洲精品一区在线观看香蕉| 亚洲人成在线观看一区二区| 久久一二三国产| 免费不卡在线观看av| 黄色一区二区三区四区| 久久久久久久久综合| 久久综合久久久久88| 一区二区亚洲精品国产| 久久精品国产一区二区电影| 久久婷婷久久| 亚洲第一在线综合在线| 久久亚洲综合色| 欧美激情一区二区三区不卡| 亚洲国产成人久久综合| 欧美成人免费在线| 亚洲人成毛片在线播放女女| 一区二区三区回区在观看免费视频 | 亚洲自拍都市欧美小说| 国产精品婷婷午夜在线观看| 亚洲欧美日本另类| 久久久亚洲高清| 亚洲国产影院| 欧美日韩精品免费在线观看视频| 日韩午夜av| 欧美在线视频观看| 极品少妇一区二区三区| 欧美激情网友自拍| 中文久久乱码一区二区| 久久国产精品久久精品国产| 在线观看亚洲一区| 欧美激情精品久久久久久蜜臀 | 欧美在线视频免费| 欧美福利在线| 亚洲一品av免费观看| 国产一区二区三区的电影 | 欧美四级在线观看| 欧美一区二区三区在线视频| 欧美不卡一区| 亚洲天堂av综合网| 狠狠色综合色综合网络| 欧美日韩国产一区二区三区| 亚洲欧美一区二区精品久久久 | 正在播放欧美视频| 国产日韩精品一区二区三区在线 | 欧美精品一区二区在线播放| 在线亚洲欧美| 欧美国产一区视频在线观看| 亚洲欧美日韩视频一区| 在线日韩电影| 国产精品国产一区二区| 米奇777超碰欧美日韩亚洲| 亚洲一区激情| 亚洲国产日韩一级| 久久综合久久综合久久综合| 亚洲一区二区欧美日韩| 一区二区三区在线视频播放| 国产精品国产三级国产a| 久久婷婷亚洲| 香蕉久久夜色精品| 99热这里只有精品8| 欧美国产日韩a欧美在线观看| 午夜久久影院| 亚洲一区二区三区激情| 亚洲三级网站| 亚洲电影观看| 激情五月综合色婷婷一区二区| 欧美午夜精品久久久久免费视| 欧美大片免费看| 久久精品一区二区三区四区 | 欧美专区在线观看| 亚洲一级免费视频| 99精品热6080yy久久| 亚洲欧洲日产国产综合网| 欧美91大片| 噜噜噜久久亚洲精品国产品小说| 久久av二区| 欧美在线日韩精品| 久久精品1区| 久久国产精品99国产精| 欧美一区激情视频在线观看| 午夜精品久久| 欧美专区在线观看一区| 性久久久久久久久久久久| 亚洲一区二区在线免费观看| 国产精品99久久久久久久vr| 在线综合欧美| 亚洲欧美综合| 久久国产精品网站| 久久久久高清| 欧美国产免费| 亚洲国产一区视频| 日韩亚洲欧美成人| 亚洲视频在线视频| 性娇小13――14欧美| 欧美在线看片| 老司机67194精品线观看| 免费在线欧美黄色| 欧美日韩你懂的| 国产精品久久久久久福利一牛影视 | 亚洲女同在线| 久久九九99| 欧美91精品| 国产精品九九| 一区二区视频免费在线观看| 最新日韩av| 亚洲伊人观看| 老色鬼久久亚洲一区二区 | 亚洲欧美日韩精品久久亚洲区 | 一区二区三区国产| 性一交一乱一区二区洋洋av| 久久久精品一品道一区| 欧美成人一区二区| 国产精品久久久久av| 极品尤物久久久av免费看| 亚洲欧洲精品天堂一级| 亚洲午夜久久久久久久久电影网| 久久久久久9| 亚洲精品自在久久| 欧美与欧洲交xxxx免费观看| 欧美高清在线一区| 国产人久久人人人人爽| 日韩视频专区| 久久夜色精品一区| 夜夜精品视频一区二区| 久久久久免费观看| 欧美视频一区二区三区在线观看 | 欧美精品免费播放| 国产性天天综合网| 中文av一区特黄| 免费成人高清在线视频| 亚洲视频在线播放| 欧美国产日本在线| 韩国视频理论视频久久| 亚洲在线成人精品| 亚洲欧洲一区二区三区在线观看| 欧美一区二区黄| 国产精品久久久久婷婷| 日韩午夜在线电影| 欧美成人中文字幕| 久久国产精品亚洲va麻豆| 国产精品久久久久国产精品日日| 亚洲精品视频在线播放|