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

積木

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包含了f2f4,f2包含了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视频| 欧美激情一区三区| 欧美精品尤物在线| 亚洲一区在线看| 欧美在线不卡| 亚洲片区在线| 亚洲午夜一区二区| 今天的高清视频免费播放成人| 欧美成人综合网站| 欧美日韩国产一区二区三区地区 | 久久综合给合| 一卡二卡3卡四卡高清精品视频| 9久re热视频在线精品| 国产欧美在线看| 免费亚洲电影在线观看| 欧美精品一区二区高清在线观看| 亚洲影院色在线观看免费| 欧美一区高清| 亚洲视频欧美在线| 久久精品国产欧美激情| 国产精品99久久久久久宅男| 欧美亚洲视频一区二区| 一区二区三区四区五区视频| 欧美在线视频免费| 亚洲一区二区视频在线| 久久久五月天| 性色av一区二区三区在线观看| 久久综合99re88久久爱| 欧美在线观看视频一区二区三区| 欧美大片va欧美在线播放| 久久久久久久综合| 欧美四级在线观看| 亚洲高清资源| 国内精品久久久久伊人av| 夜夜嗨av一区二区三区| 亚洲人成艺术| 久久久久久国产精品mv| 性欧美8khd高清极品| 欧美日韩1区2区3区| 欧美国产日韩一区二区三区| 国产一区日韩一区| 亚洲永久在线| 亚洲女同同性videoxma| 欧美日韩成人综合在线一区二区| 欧美电影免费观看大全| 韩日精品视频| 欧美亚洲一区二区在线观看| 亚洲欧美日韩精品久久亚洲区| 欧美久久久久免费| 亚洲国产精品久久久久婷婷老年| 亚洲成人在线观看视频| 久久久精品五月天| 另类av一区二区| 狠狠久久婷婷| 久久久久久久综合日本| 老司机免费视频一区二区| 国产亚洲精品一区二区| 性欧美暴力猛交69hd| 久久不射中文字幕| 国产综合久久久久影院| 欧美在线|欧美| 老司机免费视频一区二区三区| 亚洲免费在线精品一区| 日韩视频一区| 久久久水蜜桃| 免费在线一区二区| 在线日韩中文字幕| 欧美成人按摩| 99精品国产高清一区二区| 亚洲天堂av在线免费观看| 欧美三级午夜理伦三级中文幕| 一本色道久久88亚洲综合88| 亚洲在线成人| 国产综合久久久久久鬼色| 久久久久久久高潮| 亚洲高清在线播放| 一区二区电影免费在线观看| 国产精品av久久久久久麻豆网| 宅男噜噜噜66一区二区| 久久久久91| 亚洲欧洲日韩在线| 欧美肉体xxxx裸体137大胆| 亚洲欧美日韩国产一区二区三区 | 欧美色精品天天在线观看视频 | 亚洲网友自拍| 老司机免费视频一区二区| 亚洲日本aⅴ片在线观看香蕉| 欧美日韩国产区一| 亚洲欧美日韩在线高清直播| 欧美激情免费在线| 亚洲欧美日韩国产成人精品影院| 国内成+人亚洲+欧美+综合在线| 老司机午夜精品| 亚洲特黄一级片| 欧美激情久久久久| 欧美在线视频免费播放| 亚洲国产精品久久精品怡红院| 欧美三日本三级少妇三99| 久久裸体视频| 99国产精品自拍| 免费成人性网站| 欧美在线免费| 99在线观看免费视频精品观看| 国产日韩精品一区观看| 欧美国产大片| 久久久精彩视频| 亚洲网站视频福利| 亚洲激情av| 裸体歌舞表演一区二区| 亚洲一区二区3| 亚洲三级电影全部在线观看高清| 国产日韩欧美麻豆| 欧美日韩一级大片网址| 免费h精品视频在线播放| 欧美自拍丝袜亚洲| 一区二区三区视频在线| 亚洲欧洲精品一区二区三区波多野1战4 | 中文欧美日韩| 亚洲日本电影| 亚洲国产精品va在线看黑人动漫| 国产精品午夜在线| 欧美日韩午夜剧场| 欧美激情一区二区三区全黄| 久久综合伊人| 久久精品女人天堂| 午夜精品久久久久99热蜜桃导演| 99国产精品久久久久久久成人热| 亚洲成色999久久网站| 久久亚洲精品视频| 久久久久久久91| 久久精品理论片| 久久国产一二区| 欧美在线在线| 欧美在线免费视频| 欧美亚洲三区| 久久精品一二三| 卡一卡二国产精品| 久久婷婷久久一区二区三区| 久久精品国产亚洲一区二区三区| 欧美一级精品大片| 久久精品国产77777蜜臀| 久久久久久精| 欧美fxxxxxx另类| 欧美激情片在线观看| 亚洲欧洲一级| 宅男噜噜噜66一区二区| 亚洲综合日韩在线| 久久国产日韩欧美| 久热精品在线视频| 欧美日韩国产色视频| 国产精品久久7| 国产日韩欧美综合一区| 伊人成人网在线看| 亚洲人成人77777线观看| 一本色道久久综合亚洲精品小说| 亚洲一区免费在线观看| 欧美专区亚洲专区| 欧美国产视频在线观看| 亚洲黄色在线视频| 亚洲一区二区三区三| 久久精品亚洲国产奇米99| 欧美成人一区在线| 国产精品久在线观看| 亚洲成色www8888| 夜夜狂射影院欧美极品| 欧美在线精品免播放器视频| 欧美成人国产一区二区| 日韩一区二区久久| 久久99伊人| 欧美日韩123| 狠狠色伊人亚洲综合网站色| 日韩亚洲精品在线| 久久国内精品视频| 亚洲日本在线视频观看| 欧美一区二区啪啪| 欧美韩日高清| 国产一区二区三区精品欧美日韩一区二区三区 | 国产精品久久影院| 亚洲国产清纯| 欧美在线观看日本一区| 亚洲激情女人| 久久久久久综合网天天| 国产精品久久久久一区二区三区 | 日韩视频永久免费| 久久亚洲欧美| 亚洲图片你懂的| 欧美大香线蕉线伊人久久国产精品| 国产精品网站在线播放| 亚洲精品日韩在线观看| 久久综合电影一区| 亚洲女人天堂av| 欧美日韩美女在线观看| 亚洲黄色天堂| 欧美a级一区| 久久精品视频亚洲| 国产亚洲精品久| 亚洲女人av|