C++的组合(Composite)模式

简介: 现欲构造一个文件/目录树,采用组合(Composite)设计模式来设计,得到的类图如下: C++代码为: 1 #include 2 #include 3 #include 4 5  using namespace std; 6 7  class AbstractFile...

现欲构造一个文件/目录树,采用组合(Composite)设计模式来设计,得到的类图如下:

img_5d845cb6158a8647e19709c1f71a429f.png

C++代码为:

 
 
1 #include < list >
2 #include < iostream >
3 #include < string >
4
5   using namespace std;
6
7   class AbstractFile {
8 protected :
9 string name; /* 文件或目录名 */
10 public :
11 void printName() {cout << name << endl;} /* 打印文件或目录名称 */
12 virtual void addChild(AbstractFile * file) = 0 ; /* 给一个目录增加子目录或文件 */
13 virtual void removeChild(AbstractFile * file) = 0 ; /* 删除一个目录的子目录或文件 */
14 virtual list < AbstractFile *> * getChildren() = 0 ; /* 保存一个目录的子目录或文件 */
15 };
16
17 class File: public AbstractFile{
18 public :
19 File( string name) { this -> name = name;}
20 void addChild(AbstractFile * file) { return ;}
21 void removeChild(AbstractFile * file) { return ;}
22 list < AbstractFile *> * getChildren() { return NULL;}
23 };
24
25 class Folder: public AbstractFile {
26 private :
27 list < AbstractFile *> childList; /* 存储子目录或文件 */
28 public :
29 Folder( string name) { this -> name = name;}
30 void addChild(AbstractFile * file) {childList.push_back(file);}
31 void removeChild(AbstractFile * file) {childList.remove(file);}
32 list < AbstractFile *> * getChildren() { return & childList;}
33 };
34
35 int main() {
36 AbstractFile * rootFolder = new Folder( " c:\\ " );
37 AbstractFile * compositeFolder = new Folder( " composite " );
38 AbstractFile * WindowsFolder = new Folder( " Windows " );
39 AbstractFile * file = new File( " TestComposite.C++ " );
40 rootFolder -> addChild(compositeFolder);
41 rootFolder -> addChild(WindowsFolder);
42 compositeFolder -> addChild(file);
43 rootFolder -> printName();
44 compositeFolder -> printName();
45 WindowsFolder -> printName();
46 file -> printName();
47 return 0 ;
48 }
相关文章
|
6月前
|
设计模式 Java uml
C++设计模式之 依赖注入模式探索
C++设计模式之 依赖注入模式探索
249 0
|
6月前
|
设计模式 编译器 API
【C/C++ Pimpl模式】隐藏实现细节的高效方式 (Pimpl Idiom: An Efficient Way to Hide Implementation Details)
【C/C++ Pimpl模式】隐藏实现细节的高效方式 (Pimpl Idiom: An Efficient Way to Hide Implementation Details)
512 1
|
6月前
|
数据采集 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置软件触发模式(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置软件触发模式(C++)
69 0
|
6月前
|
消息中间件 负载均衡 监控
【ZMQ PUB模式指南】深入探究ZeroMQ的PUB-SUB模式:C++编程实践、底层原理与最佳实践
【ZMQ PUB模式指南】深入探究ZeroMQ的PUB-SUB模式:C++编程实践、底层原理与最佳实践
1845 1
|
6月前
|
设计模式 中间件 程序员
【C/C++ 奇异递归模板模式 】C++中CRTP模式(Curiously Recurring Template Pattern)的艺术和科学
【C/C++ 奇异递归模板模式 】C++中CRTP模式(Curiously Recurring Template Pattern)的艺术和科学
318 3
|
设计模式 网络协议 Java
Reactor 模式网络服务器【I/O多路复用】(C++实现)
Reactor 模式网络服务器【I/O多路复用】(C++实现)
652 1
|
6月前
|
算法 编译器 程序员
深入理解C++编译模式:了解Debug和Release的区别
深入理解C++编译模式:了解Debug和Release的区别
1025 3
|
6月前
|
消息中间件 存储 监控
【ZeroMQ的SUB视角】深入探讨订阅者模式、C++编程实践与底层机制
【ZeroMQ的SUB视角】深入探讨订阅者模式、C++编程实践与底层机制
768 1
|
6月前
|
设计模式 负载均衡 算法
C/C++发布-订阅者模式世界:揭秘高效编程的秘诀
C/C++发布-订阅者模式世界:揭秘高效编程的秘诀
269 1
|
6月前
|
设计模式 算法 编译器
【C/C++ PIMPL模式 】 深入探索C++中的PIMPL模式
【C/C++ PIMPL模式 】 深入探索C++中的PIMPL模式
247 0