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

積木

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>
            国产一区二区激情| 亚洲精品日韩久久| 欧美激情第六页| 国产精品xxxxx| 欧美激情黄色片| 国产精品伊人日日| 亚洲国产一区二区视频| 国产精品主播| 亚洲精品国产品国语在线app| 国产欧美一区二区三区久久 | 毛片基地黄久久久久久天堂| 欧美日韩免费一区| 亚洲女优在线| 欧美日本二区| 亚洲激情成人| 精品动漫一区二区| 亚洲欧美精品suv| 亚洲制服欧美中文字幕中文字幕| 米奇777在线欧美播放| 久久久99爱| 国产乱码精品一区二区三区不卡 | 亚洲福利视频二区| 久久成人免费日本黄色| 亚洲欧美日韩综合aⅴ视频| 欧美激情国产日韩| 欧美好骚综合网| 伊人激情综合| 久久久国产精品一区二区三区| 欧美一区二区在线播放| 欧美成人免费va影院高清| 蜜桃av噜噜一区| 一区二区三区在线免费播放| 欧美一站二站| 久久性天堂网| 韩国av一区| 久久天天躁狠狠躁夜夜av| 另类亚洲自拍| 亚洲成在人线av| 久久精品国产69国产精品亚洲 | 久久精品天堂| 国产一区在线观看视频| 欧美自拍偷拍| 久久综合九色综合欧美狠狠| 国产精品区免费视频| 亚洲视频在线视频| 性色av一区二区三区在线观看| 国产精品久久午夜| 亚洲欧美久久久| 久久久精品一区二区三区| 黄色另类av| 欧美专区一区二区三区| 午夜精品一区二区三区在线| 国产性做久久久久久| 久久精品亚洲精品| 欧美激情无毛| 亚洲小视频在线观看| 国产精品日韩电影| 久久天天躁狠狠躁夜夜av| 亚洲国产日韩在线一区模特| 亚洲视频综合| 国产日韩一区二区| 老鸭窝亚洲一区二区三区| 亚洲国产欧美一区| 午夜精品一区二区三区四区| 国产亚洲福利| 蜜桃av综合| 中文欧美日韩| 美女任你摸久久| 亚洲午夜久久久久久尤物| 国产精品亚洲一区| 免费成人av在线| 亚洲视频中文| 亚洲电影在线免费观看| 午夜日韩激情| 亚洲电影欧美电影有声小说| 欧美午夜免费影院| 久久久亚洲午夜电影| 99v久久综合狠狠综合久久| 久久精品综合| 一区二区三区蜜桃网| 黄色亚洲网站| 欧美手机在线| 男人的天堂亚洲| 午夜精品成人在线| 亚洲激情视频| 久久一区视频| 日韩一级视频免费观看在线| 国产一区二区三区黄视频| 欧美高清你懂得| 欧美亚洲一区二区在线| 亚洲乱码国产乱码精品精| 巨乳诱惑日韩免费av| 午夜精品一区二区三区四区| 亚洲精品视频免费观看| 国产一区日韩二区欧美三区| 国产精品成人免费| 久久国产精品久久国产精品| 一区二区三区国产| 亚洲国产欧美日韩精品| 牛牛影视久久网| 欧美一区二区私人影院日本| 制服丝袜激情欧洲亚洲| 亚洲国产欧美不卡在线观看| 国产午夜精品一区二区三区视频| 欧美日韩裸体免费视频| 久久人91精品久久久久久不卡| 欧美亚洲午夜视频在线观看| 正在播放亚洲| av成人免费| 一本久久综合| 99视频一区二区| 欧美jjzz| 欧美第一黄网免费网站| 免费高清在线一区| 久久婷婷国产麻豆91天堂| 久久久久久69| 久久精品中文字幕免费mv| 午夜精品久久| 欧美一区日韩一区| 亚洲摸下面视频| 亚洲网站在线播放| 亚洲一区二区免费| 国产精品99久久久久久有的能看| 一本色道久久综合亚洲91| 亚洲九九爱视频| 一本久久综合亚洲鲁鲁| 一二三四社区欧美黄| 亚洲小说区图片区| 亚洲午夜视频在线| 欧美在线观看www| 久久久久成人精品免费播放动漫| 久久久久五月天| 久久久久天天天天| 嫩草国产精品入口| 亚洲激情偷拍| 一本一道久久综合狠狠老精东影业| 亚洲精品一区在线观看香蕉| 宅男66日本亚洲欧美视频| 亚洲一级在线观看| 亚洲视频一区二区在线观看| 亚洲——在线| 久久精品视频va| 欧美日韩免费一区二区三区视频 | 久久午夜激情| 欧美午夜精彩| 1024国产精品| 欧美一级视频免费在线观看| 欧美成人一区二区三区在线观看| 99热在这里有精品免费| 久久久久久欧美| 国产精品久久久久影院色老大| 亚洲第一精品久久忘忧草社区| 亚洲一二三区在线观看| 欧美jizzhd精品欧美喷水| 亚洲欧美国产77777| 欧美岛国激情| 一区在线免费| 欧美一级黄色网| 亚洲欧洲精品天堂一级| 久久精品一区蜜桃臀影院 | 狠狠色狠狠色综合日日五| 亚洲小说春色综合另类电影| 欧美va亚洲va香蕉在线| 午夜精品久久久99热福利| 欧美日韩八区| 在线成人性视频| 久久激情五月婷婷| 亚洲视频一起| 欧美色图五月天| 亚洲韩国精品一区| 久久久人人人| 午夜国产精品视频| 国产精品久久国产愉拍 | 羞羞漫画18久久大片| 亚洲精品久久| 欧美成人午夜视频| 在线免费精品视频| 久久久久久久久久久久久女国产乱 | 亚洲中无吗在线| 亚洲精品一区二区三区av| 免费久久99精品国产| 国语精品中文字幕| 久久久噜噜噜久久中文字免| 亚洲欧美日韩国产精品| 国产精品网站视频| 午夜影院日韩| 午夜久久99| 国产日本欧美一区二区三区在线| 亚洲欧美日韩在线高清直播| 亚洲免费av片| 欧美日韩亚洲一区二区三区四区| 亚洲免费观看在线观看| 亚洲国产综合在线看不卡| 欧美成人精品在线播放| 亚洲欧洲一区二区三区在线观看| 亚洲国产91| 欧美日韩第一区日日骚| 亚洲午夜视频在线观看| 在线一区亚洲| 国产日产精品一区二区三区四区的观看方式|