什么是命令模式
将单个请求封装成单个对象,客户端可调用不同请求完成任务。对请求有所记录,或可支持撤销等操作。

命令模式的适用场景
需要支持事务操作。
需要有类似于日志记录的功能,可在执行之前做修改操作,或意外丢失可执行恢复工作。
抽象出需要执行的动作,以参数的形式提供给命令者。

命令模式的角色
Receiver:接收者角色。执行具体逻辑的角色。
Command:命令角色,定义总的命令抽象接口。
ConcreteCommand:具体命令角色,Command的具体实现。
Invoker:请求者角色,调用命令对象执行确定的请求。
Client:客户端角色。

命令模式用例
我们到餐厅聚餐,餐厅有服务员,厨师等角色,我们点餐,服务员记录在案,我们还可以反悔,取消点过的菜品,只要在厨师未做之前就可以的,而我们点菜并未与厨师联系,服务员相当于Invoker角色,产品确定后向厨师Receiver发送命令。

UML类图

服务员Waiter类:

public class Waiter {//模仿记录菜单的列表private ArrayList<AbstractCommand> acs = new ArrayList<AbstractCommand>();public void addCommand(AbstractCommand ac){acs.add(ac);}public void deleteCommand(AbstractCommand ac){acs.remove(ac);}public void notifyCook(){System.out.println("您的菜单是:");for(AbstractCommand ac:acs){System.out.println(ac.makeFood());}}
}

抽象类AbstractCommand:

public abstract class AbstractCommand {public abstract String makeFood();
}

具体类MeatCommand:

public class MeatCommand extends AbstractCommand {@Overridepublic String makeFood() {return "香喷喷的烤肉!";}}

具体类CakeCommand:

public class CakeCommand extends AbstractCommand {@Overridepublic String makeFood() {return "可口的蛋糕!";}}

测试类:

public class Test {public static void main(String[] args) {CakeCommand cake = new CakeCommand();MeatCommand meat = new MeatCommand();Waiter waiter = new Waiter();//添加两个菜品waiter.addCommand(cake);waiter.addCommand(meat);//考虑后觉得吃不了取消一个waiter.deleteCommand(cake);//通知后厨做菜waiter.notifyCook();}}

运行结果:

您的菜单是:
香喷喷的烤肉!

命令模式总结
命令模式其实就是通过中间人的记录,来把要求者的请求记录在案,记录可更改操作,确认后统一交付执行者。
优点:更低的耦合度,灵活控制和易扩展性。可记录命令执行的结构,方便补救措施施行。
缺点:类比较庞大,大量衍生类的创建,如果我有成千上万种食物,那么这样下来整个系统会很雍容。

命令模式--把需求记录在案,让事务灵活可变(行为模式02)相关推荐

  1. 还不会分布式事务,seata xa模式入门实战送上

    文章目录 前言 一.什么是seata? 二.seata原理说明 1.角色说明 2.什么是 Seata 的事务模式? 三.SEATA 的分布式案例 1.业务逻辑说明 2.架构图 3.SEATA 的分布式 ...

  2. 分布式事务 -- seata框架AT模式实现原理

    Seata AT 模式 上一节中我们提到AT模式是基于XA事务模型演变过来的,所以他的整体机制也是一个改进版本的两阶段提交协议. 第一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和链 ...

  3. 设计模式(初探工厂与代理模式)——学习记录

    0 设计模式 一种思维,一种态度,一种进步 1 创建型模式:省去new的过程 单例模式 工厂模式 抽象工厂模式 建造者模式 原型模式. 2 结构型模式: 适配器模式 桥接模式 装饰模式 组合模式 外观 ...

  4. 多模式交通需求预测模型-CMGAT

    文章信息 文章题为<Adaptive Spatiotemporal Dependence Learning for Multi-Mode Transportation Demand Predic ...

  5. 阿里分布式事务框架Seata,AT模式原理解析

    什么是分布式事务 如今在分布式技术盛行下,许多公司都已经在使用分布式技术了,虽然分布式技术给我们项目带来了三高(高可用,高扩展,高性能)等优点,但是缺点也很明显,分布式项目一般都是分服务开发,且多个服 ...

  6. linux 随机10字符病毒,Linux 10字符串命令病毒的处理记录

    刚上线的测试服务器不停的向外发包,且CPU持续100%,远程登录后查看发现有一长度为10的随机字符串进程,kill掉,会重新生成另外长度为10的字符串进程.删除文件也会重复生成,非常痛苦.查阅cron ...

  7. 分布式事务解决方案Seata——AT模式详解

    需要了解分布式事务的同学可以关注我的专栏一起学习,欢迎沟通:分布式事务 阿里开源分布式事务一站式解决方案seata基础认识可参见:分布式事务2PC协议之--Seata方案基本认识 概述 在我的另一篇关 ...

  8. Firbase开启调试模式及常见问题记录

    目录 IOS 1.控制台日志 2.DebugView查看实时数据 Android 1.控制台日志 2.DebugView查看实时数据 常见问题 1.参数配置不正确. 2.设备时间不准确 3.项目编译模 ...

  9. 全球及中国建筑农业及矿业电动车辆行业营销模式与需求规模预测报告2022版

    全球及中国建筑农业及矿业电动车辆行业营销模式与需求规模预测报告2022版 --------------------------------------- <修订日期>:2021年12月 & ...

最新文章

  1. JackJson 使用记录
  2. java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory解决方案
  3. mui实现手机web拍照_WEB前端开发与后端开发比较
  4. Linux服务器程序编程的几个坎
  5. to_string()函数----将int类型转换为string型
  6. python复制多个文件_python 之 复制多个模板文件
  7. Windbg教程-调试非托管程序的基本命令上
  8. 前端学习(1412):多人管理32修改
  9. c 程序设计语言第1 3部分,《C程序设计语言(第2版新版)典藏版》 —1.3 for语句...
  10. 让小黑人360度旋转的制作技巧
  11. 物资管理系统c语言运行程序,C语言实现仓库物资管理系统.pdf
  12. spring cloud 学习(5) - config server
  13. 中国科技统计年鉴面板数据Excel格式(2009-2019年)
  14. 10本入门编程书籍推荐,带你入门到精通
  15. excel批量删除数值前几位
  16. 仿苹果商店 html5效果,8个超炫酷仿苹果应用的HTML5动画
  17. 如何通便清肠快速见效_如何排毒清肠通便
  18. Docker修改默认网段
  19. AutoSAR系列讲解(入门篇)5.2-描述文件
  20. 哪位大神能帮我解读下这段代码什么意思吗???万分感谢

热门文章

  1. fastposter v2.13.0 一分钟完成开发海报 [云服务来袭]
  2. 从零开始前端学习[11]:控制文本显示的样式属性
  3. autojump env: python: No such file or directory
  4. 怎样快速组建异地虚拟局域网
  5. [abc复盘] abc297 20230409
  6. EXE文件加密器(最新版V5.3)
  7. python调用摄像头拍摄照片
  8. 计算机社团未来发展计划书,电子计算机社团发展计划书.doc
  9. TBS腾讯浏览服务接入以及遇到的坑
  10. 「移动端」H5页面长按复制功能实现