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

積木

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包含了f3,f4包含了f5,f5包含了f6,f6包含了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>
            一区二区在线看| 亚洲精品一区在线观看香蕉| 小黄鸭精品aⅴ导航网站入口| 日韩午夜免费| 欧美午夜精品久久久久久超碰| 亚洲天堂成人在线视频| 亚洲天堂网在线观看| 国产精品国产三级国产a| 西西人体一区二区| 久久精品视频亚洲| 亚洲人在线视频| 日韩亚洲精品视频| 国产日韩精品一区观看| 麻豆精品国产91久久久久久| 国产精品久久999| 亚洲尤物视频网| 国内视频一区| 国产精品视频免费| 久久久精品性| 欧美一区二区三区在线| 欧美福利视频网站| 久久精品99无色码中文字幕| 国产精品久久久久久久浪潮网站| 日韩一级二级三级| 99视频在线精品国自产拍免费观看 | 国产真实乱偷精品视频免| 亚洲图片欧美日产| 欧美一区二区三区免费看| 国产精品美女久久| 亚洲欧美日韩国产一区二区三区| 欧美一区91| 国产在线观看精品一区二区三区| 亚洲欧美另类中文字幕| 欧美一区二区三区在| 国产日韩av高清| 欧美在线精品一区| 你懂的国产精品永久在线| 亚洲国产欧美一区二区三区丁香婷| 久久精品一级爱片| 亚洲国产成人久久综合| 亚洲经典在线| 欧美三级日本三级少妇99| 亚洲一区图片| 久久综合九色综合久99| 最新国产成人在线观看| 欧美视频在线免费| 久久国产精品久久精品国产 | 亚洲精品久久久一区二区三区| 亚洲精品免费观看| 国产精品久久9| 久久久精品999| 亚洲精品麻豆| 久久本道综合色狠狠五月| 亚洲第一黄网| 欧美日韩国语| 欧美在线观看视频一区二区三区| 欧美激情va永久在线播放| 一区二区三区视频在线| 国产日韩欧美中文在线播放| 久久免费视频观看| 在线视频日韩| 麻豆国产精品va在线观看不卡| 一本色道婷婷久久欧美| 激情懂色av一区av二区av| 欧美伦理在线观看| 久久不见久久见免费视频1| 欧美激情精品久久久久久免费印度| 亚洲线精品一区二区三区八戒| 一色屋精品视频在线看| 欧美日韩三级| 久久天堂精品| 新67194成人永久网站| 亚洲人体大胆视频| 麻豆久久精品| 久久国产加勒比精品无码| 亚洲毛片在线免费观看| 黄色成人片子| 国产美女精品人人做人人爽| 欧美日韩国产精品成人| 美女视频一区免费观看| 亚洲欧美日本日韩| 一本不卡影院| 亚洲承认在线| 麻豆视频一区二区| 欧美在线电影| 亚洲一区二区三区成人在线视频精品| 亚洲国产婷婷| 黄色成人av网| 国内精品视频久久| 国产精品一区二区在线| 国产精品成人免费视频| 欧美欧美全黄| 欧美高清视频www夜色资源网| 久久免费99精品久久久久久| 欧美一级播放| 亚洲欧美偷拍卡通变态| 亚洲免费视频在线观看| 亚洲少妇最新在线视频| 日韩网站在线看片你懂的| 亚洲人在线视频| 亚洲福利国产精品| 亚洲高清不卡| 亚洲国产精品精华液网站| 欧美国产丝袜视频| 欧美成人三级在线| 免费在线亚洲| 欧美国产精品v| 亚洲第一精品夜夜躁人人爽| 欧美激情第4页| 亚洲激情欧美| 亚洲精品在线看| 99视频在线精品国自产拍免费观看| 亚洲韩国精品一区| 日韩午夜激情电影| 亚洲一区二区毛片| 午夜在线精品| 久久精品人人做人人综合| 久久一综合视频| 欧美成人蜜桃| 欧美色视频日本高清在线观看| 国产精品久久二区| 国产一区二区三区在线免费观看| 国内揄拍国内精品久久| 亚洲国产欧美在线人成| 日韩视频中文字幕| 亚洲专区在线| 久久久999成人| 欧美韩日一区二区三区| 亚洲美洲欧洲综合国产一区| 亚洲女人av| 麻豆精品在线视频| 欧美三区在线| 国产一区二区三区日韩欧美| 亚洲二区在线观看| 一区二区免费在线视频| 久久国产精品久久久久久电车| 久久电影一区| 亚洲福利视频在线| 亚洲综合色视频| 麻豆成人av| 欧美偷拍另类| 伊人激情综合| 亚洲无线一线二线三线区别av| 久久精品人人做人人综合| 欧美黄色免费网站| 午夜欧美大片免费观看| 嫩草影视亚洲| 国产欧美日韩视频一区二区三区 | 亚洲丰满在线| 亚洲欧美一区二区原创| 美女图片一区二区| 国产精品久久一级| 亚洲精品网站在线播放gif| 久久av一区二区三区亚洲| 欧美黄色免费网站| 先锋影音网一区二区| 欧美日韩国产片| 黄色成人小视频| 午夜欧美精品久久久久久久| 欧美激情bt| 久久精品欧美日韩| 国产麻豆成人精品| 亚洲系列中文字幕| 亚洲国产高清在线观看视频| 欧美在线视频观看| 国产精品久久波多野结衣| 亚洲精品少妇| 美女国产一区| 香蕉久久久久久久av网站| 欧美日韩国产小视频在线观看| 一区二区三区在线看| 欧美在线免费视屏| 一本一本a久久| 欧美激情一区二区三区成人| 在线精品高清中文字幕| 久久精品99国产精品日本 | 99精品欧美一区二区三区| 久久亚洲欧美| 国内精品福利| 久久久欧美一区二区| 亚洲愉拍自拍另类高清精品| 国产精品v日韩精品v欧美精品网站| 亚洲免费观看高清在线观看| 欧美freesex8一10精品| 久久九九免费视频| 国内精品国产成人| 久久久久成人精品免费播放动漫| 亚洲一区三区视频在线观看 | 欧美视频一区二区三区…| 亚洲乱码国产乱码精品精98午夜| 欧美大片一区二区三区| 久久久夜色精品亚洲| 尤物视频一区二区| 欧美α欧美αv大片| 久久综合色8888| 亚洲精品一区二区三区樱花| 亚洲激情一区| 欧美日韩综合网| 欧美一区二区私人影院日本| 亚洲一区国产精品|