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

積木

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>
            在线看片一区| 91久久精品国产91久久性色tv| 欧美激情视频在线播放 | 久久久久天天天天| 欧美风情在线| 一本到12不卡视频在线dvd| 在线视频亚洲一区| 久久久久免费观看| 欧美日韩精品中文字幕| 国产视频欧美视频| 99国产精品久久久久老师 | 国产亚洲人成a一在线v站| 亚洲国产欧美不卡在线观看| 亚洲一区二区三区涩| 美女诱惑一区| 亚洲综合成人婷婷小说| 欧美国产在线电影| 在线电影一区| 久久精品国产清高在天天线| 99视频有精品| 国产丝袜一区二区| 欧美国产日韩一区二区在线观看| 欧美一区二区三区电影在线观看| 欧美日韩国产成人在线91| 亚洲欧美欧美一区二区三区| 欧美国产日韩精品| 欧美视频观看一区| 日韩亚洲不卡在线| 亚洲欧美日韩一区二区三区在线观看| 欧美激情在线播放| 久久精品官网| 欧美日韩国内自拍| 美女性感视频久久久| 欧美日韩一区二区三区在线观看免| 亚洲精品人人| 91久久久久久久久久久久久| 国产欧美日韩在线播放| 午夜欧美视频| 午夜精品久久久99热福利| 亚洲日本乱码在线观看| 香蕉av777xxx色综合一区| 国产女人aaa级久久久级| 亚洲丁香婷深爱综合| 久久综合久久综合久久| 在线观看欧美日本| 亚洲欧美日韩一区二区| 亚洲丝袜av一区| 亚洲视频大全| 在线视频免费在线观看一区二区| 亚洲精品无人区| 欧美日韩专区在线| 亚洲国产精品久久久久婷婷老年 | 欧美国产第一页| 久久国产精品久久精品国产| 香蕉成人伊视频在线观看| 日韩视频在线一区二区三区| 久久免费精品视频| 日韩亚洲欧美一区二区三区| 久久综合精品国产一区二区三区| 欧美中文字幕精品| 国产精品乱码一区二区三区| 欧美在线视频日韩| 国产精品欧美日韩| 欧美www在线| 欧美色偷偷大香| 亚洲精品美女91| 国产亚洲精品久久久久久| 亚洲男人天堂2024| 午夜久久久久久久久久一区二区| 欧美丝袜第一区| 亚洲素人一区二区| 在线观看的日韩av| 久久综合中文| 亚洲成人资源网| 国产精品一二三四区| 欧美成人免费视频| 亚洲国产99精品国自产| 午夜精品久久久久久久99黑人| 香蕉尹人综合在线观看| 美日韩精品视频| 午夜精品久久久久| 国产精品亚洲аv天堂网| 午夜精品影院| 免费看成人av| 亚洲精品久久久一区二区三区| 欧美高清视频一区二区三区在线观看| 亚洲精品免费在线播放| 亚洲香蕉在线观看| 国产亚洲毛片在线| 欧美11—12娇小xxxx| 久久久久国产精品麻豆ai换脸| 欧美日韩午夜激情| 亚洲欧美美女| 欧美成人小视频| 亚洲婷婷在线| 激情亚洲一区二区三区四区| 亚洲一区二区三区在线观看视频| 亚洲精品欧洲| 国产精品网站视频| 欧美 日韩 国产一区二区在线视频 | 欧美日韩成人精品| 在线综合亚洲欧美在线视频| 久久精品亚洲精品国产欧美kt∨| 亚洲国产日韩一级| 国产欧美日韩一区| 欧美电影在线观看完整版| 女人香蕉久久**毛片精品| 在线亚洲自拍| 在线看无码的免费网站| 国产精品第一页第二页第三页| 亚洲精品国产系列| 久久久7777| 亚洲特黄一级片| 亚洲国产精选| 国产一区二区三区免费不卡| 欧美日韩99| 欧美成人午夜免费视在线看片| 午夜精品久久久久久99热| 亚洲精品日本| 亚洲第一精品夜夜躁人人爽| 欧美一区二区私人影院日本| 国产日韩欧美综合一区| 欧美日韩国产综合视频在线| 久久久综合网| 久久国产视频网站| 久热国产精品| 亚洲人成网在线播放| 欧美激情中文字幕在线| 久久久综合激的五月天| 欧美一区二区三区视频| 亚洲视频日本| 日韩香蕉视频| 久久成人精品无人区| 亚洲深夜福利视频| 在线性视频日韩欧美| 亚洲精品美女91| 亚洲精品乱码久久久久久黑人 | 欧美日韩午夜在线| 欧美激情影院| 欧美日本簧片| 亚洲欧美日韩一区在线| 中日韩午夜理伦电影免费| 日韩亚洲综合在线| 一二美女精品欧洲| 玖玖综合伊人| 美女诱惑黄网站一区| 美女精品视频一区| 欧美大片在线观看一区| 欧美插天视频在线播放| 欧美va天堂| 亚洲国产人成综合网站| 亚洲日本激情| 亚洲美女av黄| 亚洲一区二区视频| 亚洲在线不卡| 久久精品国产99| 麻豆成人综合网| 欧美激情视频一区二区三区免费| 欧美乱妇高清无乱码| 欧美日韩一区二区三区高清| 国产精品日韩高清| 黄色av一区| 国产精品亚洲产品| 韩国精品主播一区二区在线观看| 影音先锋久久| 9色精品在线| 亚洲国产综合在线看不卡| 亚洲人成在线播放| 亚洲视频在线观看视频| 欧美主播一区二区三区美女 久久精品人 | 欧美四级剧情无删版影片| 国产精品一区二区在线观看不卡| 国产综合久久| 国产精品捆绑调教| 一区免费观看| 亚洲视频第一页| 久久久久五月天| 亚洲精品1234| 亚欧成人在线| 欧美日韩另类视频| 国产一区二区观看| av成人老司机| 老巨人导航500精品| 亚洲精品国产精品乱码不99按摩| 亚洲专区欧美专区| 美女国产一区| 国产视频一区二区三区在线观看| 亚洲国产老妈| 校园春色综合网| 欧美高清视频在线播放| 亚洲欧美成人一区二区在线电影| 毛片av中文字幕一区二区| 国产精品久久网站| 亚洲免费观看视频| 日韩手机在线导航| 久久婷婷综合激情| 久久综合狠狠| 亚洲欧美日韩国产一区二区三区| 欧美高清视频一区二区三区在线观看| 国产视频综合在线|