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

積木

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>
            欧美午夜不卡视频| 亚洲欧美影音先锋| 99爱精品视频| 亚洲精品国产精品国自产观看浪潮 | 一区二区三区精品视频在线观看| 亚洲综合色在线| 蜜桃久久av一区| 欧美三级网页| 久久九九全国免费精品观看| 国产一区二区三区的电影| 欧美综合激情网| 噜噜噜噜噜久久久久久91| 裸体一区二区| 亚洲香蕉网站| 亚洲国产精品va| 亚洲精品国产精品国自产观看浪潮| 亚洲国产精品黑人久久久| 欧美日韩p片| 香蕉久久久久久久av网站| 亚洲免费视频网站| 欧美国产激情二区三区| 久久激情网站| 中文亚洲视频在线| 亚洲综合大片69999| 欧美日韩免费观看一区| 美女图片一区二区| 欧美色综合网| 国产精品影视天天线| 精品51国产黑色丝袜高跟鞋| 亚洲美女免费精品视频在线观看| 亚洲欧美电影在线观看| 免费亚洲电影在线观看| 9久草视频在线视频精品| 亚洲欧美日韩在线高清直播| 另类专区欧美制服同性| 国产精品激情| 在线看无码的免费网站| 宅男噜噜噜66一区二区66| 久久在线精品| 亚洲美女在线一区| 亚洲欧美在线网| 欧美日韩精选| 悠悠资源网亚洲青| 在线视频精品一| 久久精品一本久久99精品| 国产日韩欧美视频| 麻豆久久精品| 欧美精品一线| 欧美无乱码久久久免费午夜一区 | 麻豆精品91| 久久影院午夜片一区| 国产精品你懂的在线| 久久精品视频一| 欧美精品久久一区| 欧美精品大片| 欧美一区视频在线| 亚洲天堂网在线观看| 欧美精品激情| 影音欧美亚洲| 久久在线视频在线| 亚洲免费福利视频| 欧美三级网址| 91久久精品美女高潮| 欧美大秀在线观看| 欧美在线一二三四区| 国产精品中文在线| 亚洲四色影视在线观看| 欧美成人tv| 欧美一区二视频| 国产麻豆综合| 亚洲欧美欧美一区二区三区| 亚洲欧洲一区二区三区久久| 亚洲欧洲精品一区二区三区不卡| 亚洲国产日韩欧美在线图片| 亚洲视频日本| 日韩视频免费观看高清完整版| 夜夜嗨av一区二区三区中文字幕| 亚洲精品国产精品乱码不99| 久久精品国产久精国产思思| 欧美视频在线观看视频极品 | 欧美金8天国| 国产亚洲一区二区精品| 亚洲男女自偷自拍| 亚洲国产一区视频| 欧美日韩精品免费| 麻豆成人在线| 久久夜色撩人精品| 亚洲欧洲综合| 亚洲无限乱码一二三四麻| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲成色精品| 欧美精品一级| 欧美日韩国产系列| 99热精品在线| 亚洲肉体裸体xxxx137| 欧美成人免费在线| 亚洲欧美日韩网| 性欧美暴力猛交另类hd| 最近中文字幕日韩精品| 亚洲激情视频在线播放| 国产精品毛片大码女人| 欧美资源在线| 欧美精品www| 亚洲制服少妇| 久久综合伊人| 99日韩精品| 欧美一区激情| 亚洲乱码国产乱码精品精天堂| 亚洲免费视频网站| 在线观看91久久久久久| 久久成人精品电影| 欧美视频不卡中文| 久久嫩草精品久久久精品| 欧美日韩在线视频首页| 久久精品人人做人人综合| 国产精品99一区二区| 久久一区二区三区国产精品| 国产精品白丝av嫩草影院| 久久久精品国产99久久精品芒果| 欧美日韩另类一区| 久久久久久久综合日本| 国产精品九九久久久久久久| 久久伊人亚洲| 国产精品综合网站| 亚洲激情欧美| 亚洲欧洲久久| 久久久国产精品一区二区中文 | 国产亚洲欧美一级| 亚洲国产电影| 亚洲国产第一页| 亚洲视频综合在线| 最新热久久免费视频| 欧美日本二区| 宅男精品视频| 久久综合免费视频影院| 伊人蜜桃色噜噜激情综合| 欧美激情片在线观看| 亚洲精品精选| 亚洲欧美日韩第一区| 亚洲一区中文| 黑人巨大精品欧美一区二区| 亚洲高清资源| 亚洲精品美女在线观看播放| 欧美一区二区三区男人的天堂| 国产原创一区二区| 欧美亚洲视频一区二区| 亚洲欧美日韩综合国产aⅴ| 亚洲日本成人网| 欧美日韩成人在线播放| 黄色成人在线网址| 国产欧美一区二区精品性| 国产精品亚洲产品| 欧美综合第一页| 午夜在线视频观看日韩17c| 亚洲国产精品第一区二区| 亚洲精品123区| 亚洲丰满少妇videoshd| aa级大片欧美三级| 亚洲欧美激情四射在线日 | 久久综合国产精品| 性色av一区二区怡红| 亚洲国产精品久久久久久女王| 美国成人毛片| 亚洲欧美日韩国产综合在线 | 亚洲精品网站在线播放gif| 黄色日韩精品| 欧美激情导航| 国产午夜精品久久久| 亚洲二区精品| 亚洲激情亚洲| 国产伦精品一区二区三区在线观看| 激情成人亚洲| 久热这里只精品99re8久| 欧美三级乱码| 一区二区三区精品视频| 亚洲视频在线免费观看| 欧美国产高潮xxxx1819| 久久久久久久久蜜桃| 欧美国产成人精品| 亚洲国产成人av好男人在线观看| 亚洲日产国产精品| 亚洲国产岛国毛片在线| 欧美国产欧美综合| 欧美激情精品久久久久久蜜臀 | 久热综合在线亚洲精品| 葵司免费一区二区三区四区五区| 国产日韩欧美中文| 亚洲网站在线播放| 久久综合狠狠| 中日韩午夜理伦电影免费| 久久精品国语| 欧美精品麻豆| 中文亚洲欧美| 欧美国产精品劲爆| 噜噜噜在线观看免费视频日韩| 国产精品扒开腿做爽爽爽视频| 亚洲黄一区二区三区| 亚洲精品美女在线| 久久激情一区| 精东粉嫩av免费一区二区三区|