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

積木

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包含了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>
            亚洲男人第一网站| 在线亚洲免费视频| 免费短视频成人日韩| 亚洲成色最大综合在线| 亚洲国产精品精华液2区45| 欧美二区乱c少妇| 国产精品99久久不卡二区| 中文国产一区| 国产亚洲欧美一区二区| 欧美激情一区二区| 国产精品久久久久91| 久久一区激情| 欧美日本一区二区高清播放视频| 亚洲午夜久久久久久久久电影院 | 欧美福利网址| 欧美日韩亚洲激情| 久久综合一区二区三区| 欧美日韩大片| 久久精品国产亚洲aⅴ| 欧美成人一区二区三区| 亚洲欧美欧美一区二区三区| 久久夜色精品国产| 亚洲欧美日韩网| 蜜臀99久久精品久久久久久软件| 亚洲一区影音先锋| 免费欧美在线| 久久精品免视看| 欧美日韩一区二区精品| 蜜臀久久99精品久久久久久9| 欧美日韩一区二区三区在线观看免| 欧美一区三区二区在线观看| 欧美高清hd18日本| 久久天天狠狠| 国产精品亚洲综合天堂夜夜| 亚洲国产黄色| 影音先锋欧美精品| 午夜激情亚洲| 亚洲永久免费视频| 欧美国产日产韩国视频| 老巨人导航500精品| 国产精品亚洲综合一区在线观看 | 亚洲欧美一区二区原创| 一本色道久久综合亚洲精品小说| 欧美一级专区免费大片| 午夜精品福利一区二区三区av| 欧美激情精品久久久六区热门| 久久久久国产一区二区三区| 国产精品久久久99| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲精品欧美日韩| 亚洲日韩中文字幕在线播放| 久久天堂av综合合色| 欧美专区亚洲专区| 国产日韩欧美综合精品| 亚洲永久免费精品| 午夜精品免费| 国产精品视频免费观看| 一区二区三区欧美日韩| 亚洲视频观看| 国产精品成人在线观看| 一区二区三区www| 亚洲一区二区三区激情| 国产精品国产三级国产aⅴ入口| 亚洲精品一区在线| 中文欧美在线视频| 欧美偷拍另类| 亚洲一区二区三区在线观看视频| 亚洲欧美日韩中文播放| 国产精品久久久久一区二区三区共| 一本一本久久| 久久国产精品久久久久久久久久| 国产夜色精品一区二区av| 久久精品免费电影| 亚洲第一在线视频| 一本色道久久综合狠狠躁篇的优点 | 夜夜爽av福利精品导航| 欧美日韩国产成人在线| 一本久久综合亚洲鲁鲁| 性做久久久久久久久| 国产一区av在线| 欧美插天视频在线播放| 亚洲日韩中文字幕在线播放| 亚洲尤物在线视频观看| 国产色综合网| 你懂的国产精品永久在线| 亚洲精品久久久久久久久久久 | 国产一区二区三区免费不卡| 久久亚洲国产精品日日av夜夜| 欧美激情精品久久久六区热门 | 亚洲日本在线观看| 国产精品电影观看| 久久久国产成人精品| 亚洲欧洲日本一区二区三区| 午夜精品福利视频| 亚洲国产乱码最新视频| 欧美亚男人的天堂| 久久久人成影片一区二区三区| 亚洲欧洲视频在线| 久久精品30| 一本色道久久88综合亚洲精品ⅰ| 国产精品一区在线播放| 欧美成人激情视频| 午夜精品一区二区三区在线视| 欧美激情亚洲一区| 久久精品国产一区二区电影 | 欧美系列精品| 蜜臀a∨国产成人精品| 亚洲摸下面视频| 亚洲人午夜精品| 久久中文字幕一区| 欧美一二区视频| 99re6热在线精品视频播放速度| 国产日韩欧美91| 欧美日韩在线播放三区| 久久亚洲风情| 欧美一区激情| 亚洲欧美不卡| 亚洲视频你懂的| 亚洲精品一线二线三线无人区| 玖玖视频精品| 久久久久久夜精品精品免费| 亚洲欧美日韩精品在线| 日韩午夜在线| 亚洲精品免费在线观看| 精品不卡视频| 国内精品模特av私拍在线观看 | 久久九九免费| 欧美一区国产二区| 亚洲欧美日韩另类精品一区二区三区| 亚洲国产精品悠悠久久琪琪| 猛男gaygay欧美视频| 久久久亚洲综合| 久久夜色精品国产欧美乱| 欧美一区三区二区在线观看| 亚洲欧美综合一区| 亚洲一区二区三区免费视频| 一区二区三区欧美成人| 夜夜嗨av一区二区三区四区| 亚洲精品系列| 一区二区三区视频免费在线观看| 亚洲日本电影| 999在线观看精品免费不卡网站| 亚洲精选成人| 一区二区三区四区五区视频| 亚洲深爱激情| 亚洲欧美日韩精品综合在线观看| 亚洲一区免费在线观看| 午夜精品视频| 久久精品国产在热久久| 久久亚洲精品一区| 欧美高清视频在线播放| 亚洲日韩视频| 亚洲一卡二卡三卡四卡五卡| 亚洲综合国产精品| 久久精品五月| 欧美二区在线| 国产精品久久久久一区| 国产偷国产偷亚洲高清97cao| 国外视频精品毛片| 亚洲国产成人午夜在线一区| 亚洲美女毛片| 香蕉国产精品偷在线观看不卡| 欧美在线观看天堂一区二区三区| 久久久久成人精品| 亚洲成在人线av| 中文日韩欧美| 久久夜色精品国产亚洲aⅴ| 欧美不卡一区| 国产乱码精品一区二区三区五月婷| 国产亚洲欧美激情| 亚洲美女av黄| 久久漫画官网| 日韩一级网站| 久久一区视频| 国产精品一区久久久久| 亚洲国产福利在线| 午夜精品久久久久久久久久久久久 | 激情综合色丁香一区二区| 日韩午夜av| 久久久亚洲精品一区二区三区| 欧美激情精品久久久久久蜜臀| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美日韩亚洲综合一区| 国产专区精品视频| 一区二区不卡在线视频 午夜欧美不卡'| 小黄鸭精品密入口导航| 欧美国产另类| 欧美一区二区三区视频在线| 欧美日本网站| 亚洲高清不卡| 久久综合色88| 欧美亚洲三级| 国产精品捆绑调教| 一个色综合导航| 欧美大尺度在线观看| 欧美专区18| 国产欧美大片| 亚洲免费一在线| 亚洲美女中出| 欧美精品成人一区二区在线观看|