组合模式
来源:互联网 发布:vb6数据库实例 贴吧 编辑:程序博客网 时间:2024/06/11 11:00
对于树形结构,当容器对象(如文件夹)的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象(可以是容器对象,也可以是叶子对象)
并调用执行,牵一而动百,其中使用了递归调用的机制来对整个结构进行处理。由于容器对象和叶子对象在功能上的区别,在使用这些对象的代码中必须有区别地
对待容器对象和叶子对象,而实际上大多数情况下我们希望一致地处理它们,因为对于这些对象的区别对待将会使得程序非常复杂。组合模式为解决此类问题而诞生
,它可以让叶子对象和容器对象的使用具有一致性。
组合模式定义如下:
组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)
的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式,它是一种对象结构型模式。
#include <iostream>#include <string>#include <list>using namespace std;class AbstractFile{public: AbstractFile(const string&s=string("AbstractFile")){ m_name=s; } // virtual string setName(const string&s){m_name=s;} virtual void add(AbstractFile *file){ cout<<"不支持该操作"<<endl; } virtual void remove(AbstractFile *file){ cout<<"不支持该操作"<<endl; } virtual void killVrius(){cout<<m_typestr<<" "<<m_name<<" "<<string("杀毒完成")<<endl;} string m_name,m_typestr;};//ImageFileclass ImageFile:public AbstractFile{public: ImageFile(const string& s=string("ImageFile")){ m_name=s; m_typestr=string("ImageFile"); }};//TextFileclass TextFile:public AbstractFile{public: TextFile(const string&s=string("TextFile")){ m_name=s; m_typestr=string("TextFile"); }};//Folderclass Folder:public AbstractFile{public: Folder(const string&s=string("Folder")){ m_name=s; m_typestr=string("Floder"); } void add(AbstractFile *file){ abFileList.push_back(file); } void remove(AbstractFile *file){ abFileList.remove(file); } void killVrius(){ for(list<AbstractFile*>::iterator it=abFileList.begin(); it!=abFileList.end();++it) { AbstractFile *ab=*it; if(ab!=NULL) ab->killVrius(); } }private: list<AbstractFile*> abFileList;};int main(){ ImageFile *if1=new ImageFile("meitu"); ImageFile *if2=new ImageFile("aaaa"); TextFile *tf1=new TextFile("stl.txt"); TextFile*tf2=new TextFile("csgo.txt"); Folder *fd1=new Folder("home"); Folder *fd2=new Folder("baby"); Folder *fd3=new Folder("study"); fd2->add(if1); fd2->add(if2); fd3->add(tf1); fd3->add(tf2); fd1->add(fd2); fd1->add(fd3); fd1->killVrius(); return 0;}
阅读全文
0 0
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 现代操作系统之进程与线程(下)
- PAT继续(3n+1)猜想
- 未A,或用水法,或不熟的题
- 机器学习笔记三------支持向量机
- ACM一种排序
- 组合模式
- shiro用法笔记
- CF 161D Distance in Tree 树形DP(套路,路径长度为k点对)
- Xcode中other linker flags的作用
- Android异常:Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)'
- 机器学习怎么入门
- C++之最长公共子串(最长子数组和)(22)---《那些奇怪的算法》
- CSS3的探索之路一_(小玩意儿)
- Java写学生管理系统