设计模式-结构型03-组合模式
来源:互联网 发布:php文件管理器源码 编辑:程序博客网 时间:2024/06/08 15:00
一,动机
在Windows文件系统中,存在着如图的文件目录结构。其中有文件和文件夹两种对象,而文件夹中包含子文件夹,也可以包含有文件。
对于这种需要包含自身对象结构,组合模式描叙了如何将容器对象和叶子对象进行递归组合,使得用户在使用时无须对它们区分,可以一致的对待容器对象和叶子对象,这就是组合模式的动机
二,定义
组合模式:组合多个对象形成树形结构以表示“整体-部分”的结构层次。
组合模式对单个对象(叶子)和组合对象(容器)的使用具有一致性。
三,模式结构
1,Component(抽象构件)
为叶子以及容器对象声明接口,定义访问以及管理它的子构件的方法。
2,Leaf(叶子构件)
表示叶子节点对象,实现抽象构件定义的行为
3,Composite(容器构件)
表示容器对象,提供一个集合用于存储子节点。
4,Client(客户类)
通过抽象构件的借口来访问控制组合构件的对象
四,代码实例
下面是对文件夹组合模式的代码示例
#include <iostream>#include <list>using namespace std;class AbsFile{public: virtual void display() = 0; string GetFileName() { return filename ; } void SetFileName(string tmp) { filename = tmp ; }protected: string filename;};class ImageFile : public AbsFile{public: ImageFile(string tmp = NULL) { filename = tmp; } void display() { cout<<"这是一幅好看的图片"<<"::"<<filename<<endl; }};class TextFile:public AbsFile{public: TextFile(string tmp = NULL) { filename = tmp; } void display() { cout<<"这是一首诗歌"<<"::"<<filename<<endl; }};class Folder :public AbsFile{public: Folder(string tmp =NULL) { filename = tmp; } void display() { cout<<"这是一个文件夹"<<"::"<<filename<<",拥有如下文件 :"<<endl; list<AbsFile*>::iterator its; for(its= fileList.begin();its != fileList.end(); its ++) { (*its)->display(); } } void Add(AbsFile* tmp) { fileList.push_back(tmp); } void Remove(string fname) { list<AbsFile*>::iterator its; for(its= fileList.begin();its != fileList.end(); its ++) { if((*its)->GetFileName() == fname) { fileList.erase(its); } } }private: list<AbsFile*> fileList;};int main(){ Folder* f1 = new Folder("folder1"); f1->Add(new ImageFile("Image1")); f1->Add(new TextFile("Text1")); Folder* f2 = new Folder("folder2"); f2->Add(new TextFile("Text21")); f1->Add(f2); Folder* f3 = new Folder("folder3"); f3->Add(new ImageFile("Image31")); f2->Add(f3); f1->display(); return 0;}
0 0
- 设计模式-结构型03-组合模式
- 设计模式 - 结构型模式 - 组合模式
- 设计模式-结构型模式-组合
- 设计模式--结构型--组合模式
- 设计模式8:组合模式【结构型】
- 结构型设计模式---组合模式(Composite)
- 设计模式-结构型之组合模式
- 结构型设计模式-组合模式
- 结构型设计模式-组合模式
- 组合模式(结构型设计模式)
- 设计模式->结构型模式->组合模式(部分-整体模式)
- (C++设计模式) ------Composite 组合模式-- 结构型模式
- 设计模式-结构型模式:组合模式 Composite
- 设计模式深入学习---Component组合模式(结构型模式)
- 设计模式--结构模式--组合模式--Java
- [设计模式-结构型]组合(Composite )
- 设计模式-结构型-composite 组合
- 设计模式---结构类型---组合
- pat 1028
- C# Winform OpenFileDialog 控件
- 关于6元钱可以由1角、2角、5角、1元的以不同的组合方式进行组合
- 中序遍历和先序遍历/后序遍历构建二叉树
- 最快速度求两个数组之交集算法
- 设计模式-结构型03-组合模式
- Heritrix 3 相关
- Sum Root to Leaf Numbers
- 8个超实用的jQuery技巧攻略
- C# 获取选择文件信息
- hadoop异常之Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out.
- poj1002
- itoa函数用法
- 让你提前认识软件开发(2):软件开发工程师常用的工具软件