厚积薄发打卡Day42 : [itcast] GoF23通俗易懂的设计模式之 <命令模式>
抽象命令类(Command):定义命令的接口,声明执行的方法。 具体命令(Concrete Command):实现抽象命令类的接口,通常持有接收者,并调用其方法来完成命令所需的操作。 接收者(Receiver):真正执行命令的对象,可以是任何类,只要它能够实现命令要求的相应功能。 调用者/请求者(Invoker):请求命令对象执行请求,通常持有多个命令对象,是客户端触发命令的入口。 顾客:下单,生成订单。 服务员:收到订单后,将订单传给后厨。 后厨:根据订单制作菜品。 抽象命令类(Command):定义订单执行的方法。 具体命令(OrderCommand):持有订单和后厨,执行订单。 接收者(SeniorChef):负责制作菜品。 调用者(Waiter):收集订单,启动命令执行。
发布日期:2021-04-30 21:00:52
浏览次数:138
分类:精选文章
本文共 1039 字,大约阅读时间需要 3 分钟。
命令模式(Command Pattern)
定义
命令模式通过将请求封装为一个对象,使发出请求的责任与执行请求的责任分割开。这种设计方式使得系统能够便于存储、传递、调用、增加与管理命令对象,从而提高系统的可维护性和可扩展性。
生活中的引入
在餐馆点餐的场景中,服务员接收顾客的点单后,将订单传给后厨进行准备。这种设计模式可以帮助我们将请求的发出者(如服务员)和执行者(如后厨)分离开来,降低两者之间的耦合度。
结构
命令模式主要包含以下角色:
实例说明
以餐馆点餐流程为例:
通过命令模式的角色分配:
优缺点
优点:
- 降低耦合度:命令模式将调用操作与实现解耦,提升系统的灵活性。
- 支持撤销与恢复:结合备忘录模式,命令模式适合实现Undo和Redo操作。
- 方便宏命令支持:可以与组合模式结合,构建复杂的操作流程。
- 易于扩展:遵循开闭原则,便于新增或修改命令类。
缺点:
- 复杂性增加:系统结构可能变得复杂,增加了更多的类。
- 命令数量多:大量的具体命令类可能导致代码维护难度增加。
使用场景
- 需要将请求的发出者与执行者解耦的系统。
- 需要在不同时间或阶段处理请求,例如异步操作。
- 需要支持命令的撤销和恢复功能。
应用案例
JDK中的Runnable接口:
Runnable接口本身就是命令模式的体现,Runnable对象作为命令,负责执行特定的任务。
JUnit测试框架:
- JUnit的测试方法可以通过命令模式来执行测试用例。
Tomcat服务器:
- 每个HTTP请求都会触发命令模式,将请求封装并路由至相应的处理逻辑。
通过以上分析,可以看出命令模式在解耦请求和提高系统可维护性方面具有显著优势。
发表评论
最新留言
不错!
[***.144.177.141]2026年06月11日 03时23分38秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!