设计模式与惯用法详解
1. 组合模式(Composite)
在实际使用命令模式时,我们常常需要将多个简单命令组合成一个更复杂的命令,或者记录和重放命令(脚本化)。组合模式可以优雅地实现这些需求。
树是计算机科学中广泛使用的数据结构,如文件系统的层次组织、集成开发环境(IDE)的项目浏览器、编译器设计中的抽象语法树(AST)等都采用了树结构。组合模式就是树状数据结构的面向对象蓝图,其意图是将对象组合成树结构,以表示部分 - 整体的层次关系,让客户端可以统一处理单个对象和对象组合。
以下是一个新的具体可撤销命令类CompositeCommand的代码示例:
#include "Command.h" #include <vector> class CompositeCommand : public UndoableCommand { public: void addCommand(CommandPtr& command) { commands.push_back(command); } virtual void execute() override { for (const auto& command : commands) { command->execute(); } } virtual void undo() override { for (const auto& command : commands) { command->undo();