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

積木

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>
            91久久精品国产91久久性色tv| 免费成人在线视频网站| 免播放器亚洲一区| 久久久久久久尹人综合网亚洲| 久久精品国产第一区二区三区| 久久爱www.| 欧美成人亚洲成人| 欧美日韩国产一级| 国产精品久久久久久久久久ktv | 亚洲电影免费观看高清完整版在线观看| 久久电影一区| 欧美成人久久| 99人久久精品视频最新地址| 亚洲一区二区三区激情| 久久不见久久见免费视频1| 老司机久久99久久精品播放免费| 欧美v日韩v国产v| 国产精品久久久久天堂| 精品成人一区| 亚洲特级片在线| 欧美一区二区观看视频| 欧美成人一二三| 99热精品在线观看| 久久久av毛片精品| 欧美视频网址| 影音先锋日韩精品| 亚洲男人av电影| 久久综合伊人77777| 亚洲一区二区三区在线观看视频 | 亚洲激情网站免费观看| 在线视频精品一| 男女精品视频| 亚洲欧美另类在线| 欧美激情区在线播放| 国产字幕视频一区二区| 亚洲天天影视| 亚洲韩日在线| 久久三级视频| 国内自拍视频一区二区三区| 亚洲一区不卡| 最新69国产成人精品视频免费| 午夜在线视频一区二区区别| 欧美日韩福利| 亚洲美女免费视频| 欧美成人久久| 久久视频一区二区| 韩国三级电影一区二区| 欧美一区视频| 亚洲欧美日韩在线| 国产精品日本精品| 亚洲综合第一页| 一区二区久久久久| 欧美另类一区二区三区| 日韩图片一区| 亚洲精品孕妇| 欧美日韩免费观看一区二区三区| 亚洲第一精品电影| 久久伊人免费视频| 久久国产加勒比精品无码| 国产人久久人人人人爽| 久久国产精品毛片| 午夜国产不卡在线观看视频| 国产精品一区二区在线| 欧美在线啊v一区| 欧美一区二区三区四区在线观看地址 | 国产最新精品精品你懂的| 欧美在线观看视频一区二区三区| 一本大道av伊人久久综合| 欧美日韩亚洲视频一区| 亚洲一区欧美| 亚洲欧美日韩国产中文| 国产日韩欧美在线| 美腿丝袜亚洲色图| 欧美激情精品久久久久久大尺度| 亚洲欧洲精品成人久久奇米网 | 欧美一区不卡| 欧美伊人久久| 亚洲国产精品毛片| 亚洲精品日韩精品| 国产精品网站在线播放| 亚洲欧洲精品一区二区三区 | 欧美一区二区网站| 久久aⅴ乱码一区二区三区| 激情久久婷婷| 最新69国产成人精品视频免费| 欧美精品一区二区三区久久久竹菊 | 亚洲日本国产| 国产精品久久久久久久9999| 久久久精品国产一区二区三区| 久久精品国产亚洲a| 亚洲精品一区中文| 午夜精品久久久久久久久久久久久| 国内不卡一区二区三区| 亚洲国产黄色| 国产视频综合在线| 亚洲精品1区2区| 国产日韩欧美综合精品| 欧美激情麻豆| 国产日韩在线一区二区三区| 欧美成人亚洲| 国产欧美不卡| 91久久精品美女高潮| 国产日韩精品一区二区| 亚洲国产欧美一区| 国模精品一区二区三区| 日韩午夜av在线| 在线播放一区| 香蕉尹人综合在线观看| 一本一本a久久| 久久激五月天综合精品| 中文精品视频一区二区在线观看| 久久精品人人爽| 香蕉av福利精品导航| 欧美精品一区在线播放| 老**午夜毛片一区二区三区| 国产精品国产三级国产专区53| 欧美电影免费观看高清完整版| 国产日韩欧美成人| 99精品欧美一区二区三区综合在线 | 亚洲综合电影一区二区三区| 亚洲精品日韩激情在线电影| 久久久久久999| 久久精品麻豆| 国产日韩欧美a| 午夜亚洲福利| 久久国产精品99国产精| 国产精品国产三级国产专播品爱网 | 国精产品99永久一区一区| 亚洲视频1区2区| 亚洲视频你懂的| 亚洲第一主播视频| 久久激情一区| 免费高清在线视频一区·| 亚洲免费av电影| 欧美激情国产精品| 亚洲精品小视频在线观看| 中文av字幕一区| 国产一区二区高清| 久久五月天婷婷| 亚洲免费观看在线视频| 久久国产日韩欧美| 日韩天堂在线视频| 国产情人节一区| 欧美成人一区二区| 亚洲欧美在线看| 亚洲美女黄色| 麻豆av福利av久久av| 亚洲一区二区动漫| 亚洲国产日韩欧美在线动漫| 欧美日韩三级| 免费欧美网站| 欧美在线免费播放| 国产精品99久久久久久白浆小说 | 欧美福利网址| 欧美一区二区日韩| 国产精品99久久久久久白浆小说| 国产一区二区日韩精品| 欧美性天天影院| 欧美激情1区2区| 裸体素人女欧美日韩| 久久国产日本精品| 亚洲在线视频| 亚洲视频999| aa日韩免费精品视频一| 亚洲第一黄网| 久久久久久欧美| 久久精品国产99精品国产亚洲性色| 亚洲一级在线| 亚洲一区二区三区三| 一区二区三区欧美| 一本一本久久| 中日韩美女免费视频网站在线观看| 在线欧美日韩| 亚洲国产成人91精品| 在线观看不卡| 亚洲国产精品一区| 亚洲激情影院| 亚洲毛片在线| 99视频在线观看一区三区| 99在线精品免费视频九九视| 亚洲欧洲一区| 99视频超级精品| 亚洲欧美清纯在线制服| 性色一区二区三区| 久久精品国产精品亚洲精品| 久久精品人人| 久久久噜噜噜久久狠狠50岁| 久久久午夜电影| 欧美国产精品v| 亚洲精品一区中文| 亚洲视频在线观看| 午夜精品成人在线| 久久久国产精品一区| 免播放器亚洲| 欧美日韩精品欧美日韩精品| 国产精品都在这里| 国产人久久人人人人爽| 亚洲午夜未删减在线观看| 一区二区三区日韩| 午夜一区不卡|