概述
需求
- 一套智能家电,电灯,风扇,冰箱,洗衣机
- 不同厂家的分别需要不同app控制
- 希望一个app控制所有的家电
需求实现原理图
简单代码实现
https://gitee.com/zhipanwang/code4java/tree/master/design/src/main/java/com/wang/command
基本
- Command Pattern 。软件设计中,我们经常需要想某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个。
- 命令模式可以实现请求发送者和请求接收者彼此解耦。
- 命令模式中,会将一个请求封装为一个对象,以便使用不同参数表示不同请求,同时命令模式也支持可撤销的操作
- 通俗的说:将军发布命令,士兵执行。命令是连接二者的对象。
原理类图
Command :命令接口,需要执行的命令在此抽象中
Invoker :调用者
Receiver : 接收者。
ConcreteCommand:实现Command接口,命令具体实现。
注意事项和细节
- 发起请求的对象和执行请求的对象解耦。发起请求的对象是调用者,调用者只要调用命令对象的execute()就可以让接收者工作。而不必知道具体接收者对象是谁,如何实现请求。
- 容易设计一个命令队列,只要把命令对象放入队列,就可以多线程执行命令。
- 容易实现对请求的撤销和重做。
- 不足:可能导致某些系统有过多命令类,增加系统复杂度。
- 空命令也是一种设计模式,它为我们省去了判空的操作。
- 命令模式经典应用场景:界面一个按钮都是一条命令,模拟CMD,订单的撤销与恢复,触发-反馈机制