行为型模式 - 命令模式

命令模式

命令模式是一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象。

该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销操作。

一:问题的引入

假如你正在开发一款新的文字编辑器, 当前的任务是创建一个包含多个按钮的工具栏, 并让每个按钮对应编辑器的不同操作

你创建了一个非常简洁的 按钮类

它不仅可用于生成工具栏上的按钮, 还可用于生成各种对话框的通用按钮

在这里插入图片描述
尽管所有按钮看上去都很相似, 但它们可以完成不同的操作 (打开、 保存、 打印和应用等)。

你会在哪里放置这些按钮的点击处理代码呢?

最简单的解决方案是在使用按钮的每个地方都创建大量的子类。

这些子类中包含按钮点击后必须执行的代码。

在这里插入图片描述
你很快就意识到这种方式有严重缺陷。 首先, 你创建了大量的子类, 当每次修改基类 按钮时, 你都有可能需要修改所有子类的代码。

简单来说, GUI 代码以一种拙劣的方式依赖于业务逻辑中的不稳定代码。

在这里插入图片描述

还有一个部分最难办。 复制/粘贴文字等操作可能会在多个地方被调用。 例如用户可以点击工具栏上小小的 “复制” 按钮或者通过上下文菜单复制一些内容, 又或者直接使用键盘上的 Ctrl+C 。

我们的程序最初只有工具栏, 因此可以使用按钮子类来实现各种不同操作。

换句话来说, 复制按钮Copy­Button子类包含复制文字的代码是可行的。

在实现了上下文菜单、 快捷方式和其他功能后, 你要么需要将操作代码复制进许多个类中, 要么需要让菜单依赖于按钮, 而后者是更糟糕的选择。

二:问题的解决方案

优秀的软件设计通常会将关注点进行分离, 而这往往会导致软件的分层

最常见的例子: 一层负责用户图像界面; 另一层负责业务逻辑。

GUI 层负责在屏幕上渲染美观的图形, 捕获所有输入并显示用户和程序工作的结果

当需要完成一些重要内容时&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值