命令模式
文章目录
命令模式是一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象。
该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销操作。
一:问题的引入
假如你正在开发一款新的文字编辑器, 当前的任务是创建一个包含多个按钮的工具栏, 并让每个按钮对应编辑器的不同操作
你创建了一个非常简洁的 按钮类
它不仅可用于生成工具栏上的按钮, 还可用于生成各种对话框的通用按钮
尽管所有按钮看上去都很相似, 但它们可以完成不同的操作 (打开、 保存、 打印和应用等)。
你会在哪里放置这些按钮的点击处理代码呢?
最简单的解决方案是在使用按钮的每个地方都创建大量的子类。
这些子类中包含按钮点击后必须执行的代码。
你很快就意识到这种方式有严重缺陷。 首先, 你创建了大量的子类, 当每次修改基类 按钮时, 你都有可能需要修改所有子类的代码。
简单来说, GUI 代码以一种拙劣的方式依赖于业务逻辑中的不稳定代码。
还有一个部分最难办。 复制/粘贴文字等操作可能会在多个地方被调用。 例如用户可以点击工具栏上小小的 “复制” 按钮或者通过上下文菜单复制一些内容, 又或者直接使用键盘上的 Ctrl+C 。
我们的程序最初只有工具栏, 因此可以使用按钮子类来实现各种不同操作。
换句话来说, 复制按钮CopyButton子类包含复制文字的代码是可行的。
在实现了上下文菜单、 快捷方式和其他功能后, 你要么需要将操作代码复制进许多个类中, 要么需要让菜单依赖于按钮, 而后者是更糟糕的选择。
二:问题的解决方案
优秀的软件设计通常会将关注点进行分离, 而这往往会导致软件的分层
最常见的例子: 一层负责用户图像界面; 另一层负责业务逻辑。
GUI 层负责在屏幕上渲染美观的图形, 捕获所有输入并显示用户和程序工作的结果
当需要完成一些重要内容时&#x