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

積木

No sub title

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  140 Posts :: 1 Stories :: 11 Comments :: 0 Trackbacks

常用鏈接

留言簿(1)

我參與的團(tuán)隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

轉(zhuǎn)載自:http://patmusing.blog.163.com/blog/static/135834960201002321018760/


在面向?qū)ο蟮南到y(tǒng)中,我們經(jīng)常會遇到一類具有
容器特征的對象,即它們在充當(dāng)對象的同時,又是其他對象的容器。

舉例:

在操作系統(tǒng)中,文件的概念很廣泛,其中文件可以是普通文件,也可以是目錄(Unix中,設(shè)備也是文件),目錄中可以存放文件。Composite設(shè)計模式就是將客戶代碼與復(fù)雜的對象容器結(jié)構(gòu)解耦,讓對象容器自己來實現(xiàn)自身的復(fù)雜結(jié)構(gòu),從而使得客戶代碼就像處理簡單對象(文件)一樣來處理復(fù)雜的對象容器(目錄)

“Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.” – GoF

10. C++實現(xiàn)Structural - Composite模式 - 玄機(jī)逸士 - 玄機(jī)逸士博客

調(diào)用Directory類對象的process函數(shù),和調(diào)用PhysicalFile類對象的process一樣簡單。

從上面的UML類圖中,可以看出DirectoryFile這兩個類之間的關(guān)系:

1. Directory “is a”File

2. Directory “has a(more)” File

這是典型的遞歸結(jié)構(gòu)。因此在處理遞歸問題時,如果必要,可以考慮采用Composite模式。后面要講到的Decorator模式也是如此。

// Composite.h

#include <iostream>

#include <list>

using namespace std;

class File

{

public:

virtual void process() = 0;

// 虛函數(shù):增加一個文件

virtual void add(File* file)

{

}

// 虛函數(shù):刪除一個文件

virtual void remove(File* file)

{

}

public:

virtual ~File()

{

cout << "in the destructor of File..." << endl;

}

};

// 葉子節(jié)點

class PhysicalFile : public File

{

public:

void process()

{

cout << "process() in PhysicalFile..." << endl;

}

public:

~PhysicalFile()

{

cout << "in the destructor of PhysicalFile..." << endl;

}

};

// 容器節(jié)點:Composite節(jié)點

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;

}

上述程序中,各對象之間的關(guān)系如下圖:

10. C++實現(xiàn)Structural - Composite模式 - 玄機(jī)逸士 - 玄機(jī)逸士博客

其中f3f7PhysicalFile對象。f1包含了f2f4f2包含了f3f4包含了f5f5包含了f6f6包含了f7

運行結(jié)果如下:

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 閱讀(231) 評論(0)  編輯 收藏 引用 所屬分類: 設(shè)計模式
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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精品免费| 日韩午夜视频在线观看| 欧美日韩成人在线| 一区二区三区视频观看| 欧美中文日韩| 亚洲成人中文| 欧美日韩一区二区三区在线| 国产精品99久久不卡二区| 久久国产免费| 亚洲精品午夜精品| 国产欧美精品在线| 欧美成人蜜桃| 亚洲欧美日韩天堂一区二区| 欧美www在线| 亚洲免费网站| 亚洲国产合集| 国产精品一区久久| 欧美不卡在线视频| 香蕉成人久久| 亚洲美女91| 免费h精品视频在线播放| 一本大道久久精品懂色aⅴ | 日韩午夜黄色| 国产欧美日韩另类视频免费观看| 久久久久久网址| 在线一区二区视频| 欧美福利电影在线观看| 亚洲欧美日韩一区二区三区在线| 亚洲成人在线视频播放| 国产精品日韩一区| 欧美大片免费看| 欧美中文在线字幕| 一区二区高清视频在线观看| 欧美成人精品高清在线播放| 欧美一区成人| 亚洲一区三区电影在线观看| 在线观看一区二区视频| 国产女精品视频网站免费| 欧美另类女人| 久久激五月天综合精品| 亚洲欧美激情在线视频| 亚洲精品一区二区三区四区高清| 老色鬼精品视频在线观看播放| 亚洲一区二区三区免费在线观看| 亚洲激情社区| 精品福利免费观看| 国产一区二区高清视频| 国产精品久久久久久模特| 欧美精品久久久久久久久老牛影院| 久久久精品日韩欧美| 亚洲欧美日韩综合aⅴ视频| 中国av一区| 亚洲精品久久7777| 欧美不卡视频一区发布| 久久久久久伊人| 久久精品视频免费播放| 欧美一区二区三区视频在线观看| 一区二区三区久久精品| 亚洲乱码国产乱码精品精可以看| 亚洲电影第三页| 国产在线一区二区三区四区 | 国产一区二区三区黄视频| 国产精品日韩精品欧美在线| 欧美日韩在线观看一区二区| 欧美精品国产精品| 欧美人成在线| 欧美日韩一区二区在线播放| 欧美日韩情趣电影| 欧美香蕉视频| 国产精品亚洲网站| 国产午夜精品全部视频在线播放| 国产日韩欧美在线观看| 国产一区二区三区久久久| 狠狠狠色丁香婷婷综合久久五月| 国产小视频国产精品| 国产一区二区三区四区老人| 国产一区二区三区四区五区美女 | 欧美激情一级片一区二区| 欧美jizzhd精品欧美巨大免费| 美女尤物久久精品| 亚洲动漫精品| 日韩视频在线观看国产| 亚洲一区bb| 欧美一进一出视频| 久久综合激情| 欧美日韩一区在线观看| 国产精品一区二区久久国产| 国产一区二区三区直播精品电影| 伊人久久亚洲美女图片| 亚洲精品美女免费| 亚洲视频电影在线| 欧美在线观看视频一区二区| 久久亚洲二区| 日韩视频免费| 欧美一区二区福利在线| 免费日韩av电影| 欧美三级不卡| 禁久久精品乱码| 中文亚洲字幕| 久久嫩草精品久久久久| 亚洲精品乱码久久久久久按摩观 | 欧美一区二区在线播放| 久久综合狠狠综合久久激情| 欧美日韩中文精品| 韩日精品中文字幕| 亚洲午夜激情网页| 老巨人导航500精品| 亚洲精品孕妇| 久久久久.com| 国产精品vip| 亚洲国产裸拍裸体视频在线观看乱了中文| 一本色道久久综合亚洲精品婷婷| 久久久国产精品亚洲一区| 亚洲国产成人一区| 西西人体一区二区| 欧美日本精品一区二区三区| 国产主播精品在线| 亚洲一区二区免费在线| 欧美 日韩 国产一区二区在线视频 | 久久综合给合久久狠狠色 | 国产午夜精品久久久| 日韩一区二区免费高清| 久久久久久九九九九| 妖精视频成人观看www| 美日韩免费视频| 红桃视频欧美| 午夜精品在线看| 亚洲精品欧美一区二区三区| 久久九九久久九九| 国产精品一区二区三区乱码| 99这里有精品| 亚洲福利在线看| 久久精品水蜜桃av综合天堂| 国产精品夜夜夜一区二区三区尤| 亚洲免费黄色| 欧美激情国产日韩| 久久亚洲综合色一区二区三区| 国产精品视频精品| 亚洲欧美文学| 中文国产成人精品| 欧美日韩在线播放三区| 99国内精品久久| 亚洲人成人一区二区三区| 久久综合色8888| 精品96久久久久久中文字幕无| 欧美一区二区视频免费观看| 在线午夜精品自拍| 欧美视频观看一区| 亚洲一区二区三区精品视频| 亚洲精品乱码久久久久久日本蜜臀 | 欧美大学生性色视频| 亚洲国产精品国自产拍av秋霞| 久久美女性网| 久久久久久久综合狠狠综合| 一区二区在线不卡| 狂野欧美性猛交xxxx巴西| 久久久久九九九| 一区二区三区亚洲| 欧美国产一区二区三区激情无套| 久久久久国产精品厨房| 亚洲福利视频三区| 亚洲福利视频三区| 欧美日本中文字幕| 亚洲一区精彩视频| 亚洲主播在线播放| 国产午夜精品在线| 美女免费视频一区| 欧美高清在线视频| 在线亚洲国产精品网站| 亚洲午夜性刺激影院| 国产嫩草一区二区三区在线观看 | 国产午夜精品理论片a级大结局 | 一区二区亚洲欧洲国产日韩| 免费在线欧美黄色| 欧美激情精品久久久久久变态| 一区二区高清在线| 亚洲免费在线视频一区 二区| 国产一区二区三区在线观看免费视频 | 亚洲影视在线播放| 国产一区二区三区日韩| 欧美国产日本| 欧美日韩中文字幕在线视频| 欧美一级久久久| 老司机免费视频一区二区三区| 日韩一级裸体免费视频| 亚洲综合清纯丝袜自拍| 伊人久久综合| 99视频超级精品| 国产一级一区二区| 最新中文字幕一区二区三区| 国产精品久久网| 欧美.com| 国产精品国内视频| 欧美成人亚洲成人| 国产精品久久久久久久app| 久久综合五月| 国产精品久久久久免费a∨| 免播放器亚洲| 国产精品一区二区女厕厕|