越秀网站建设策划,网站静态界面挖取,网页设计与网站建设课程报告,柳南区新闻1. 模式简介 组合模式是一种结构型模式。 组合模式又叫做部分整体模式#xff0c;组合模式用于把一组相似的对象当做一个单一的对象。特别擅长处理树形的数据#xff0c;对于非树形的数据不好用它。
对于树形的数据#xff0c;一个典型的例子就是文件系统。在文件系统里大致…
1. 模式简介 组合模式是一种结构型模式。 组合模式又叫做部分整体模式组合模式用于把一组相似的对象当做一个单一的对象。特别擅长处理树形的数据对于非树形的数据不好用它。
对于树形的数据一个典型的例子就是文件系统。在文件系统里大致上可以分为文件夹和文件两种类型的数据。文件夹中可以包含文件也可以包含其他文件夹。就像下面这张图一样文件的组织就像一颗多叉树。 如果使用组合模式来实现类似tree命令的文件名打印UML类图如下 比较简单不详细说了直接看下面的代码吧兄弟们
2. 代码示例
#include iostream
#include string
#include vectorusing namespace std;class FileSystem
{
public:FileSystem(string name) : m_name(name) {}virtual ~FileSystem() {}virtual void show(int level 0)0;virtual bool addFile(FileSystem* file)0;
protected:string m_name;
};class File : public FileSystem
{
public:File(string name) : FileSystem(name) {}void show(int level 0){for (int i 0; i level; i)cout ;cout - m_name endl;}bool addFile(FileSystem* file) { return false; }
};class Directory : public FileSystem
{
public:Directory(string name) : FileSystem(name) {}void show(int level 0){for (int i 0; i level; i)cout ;cout m_name endl;for (int i 0; i m_files.size(); i)m_files[i]-show(level 1);}bool addFile(FileSystem* file){if (file NULL)return false;m_files.push_back(file);return true;}
private:vectorFileSystem* m_files;
};int main()
{Directory* root new Directory(root);Directory* dir1 new Directory(dir1);Directory* dir2 new Directory(dir2);File* file1 new File(file1);File* file2 new File(file2);File* file3 new File(file3);root-addFile(dir1);root-addFile(dir2);dir1-addFile(file1);dir1-addFile(file2);dir2-addFile(file3);root-show();delete root;delete dir1;delete dir2;delete file1;delete file2;delete file3;return 0;
}
运行结果如下 打印出了目录结构。
比较简单使用场景也比较受限出场机会不多。