设计模式-命令模式
命令模式
简单描述:对执行动作的具体细节进行封装,也就是无需关注具体的实现过程,只需要关注结果即可。
所属类型:行为型模式
适用情况:在某些场合,要对行为进行
记录、撤销/重做、事务
等处理实现方法:通过调用者调用接受者执行命令。顺序:调用者->命令->接收者
关键代码:定义三个角色,1、received的真正的命令执行对象;2、Command;3、invoker使用命令的入口
优点:1、降低了系统耦合度;2、新的命令可以很容易添加到系统中去
缺点:使用命令模式可能会导致某些系统有过多的具体命令类
接下来对命令模式进行一个例子:
创建一个命令接口Command
package order;
public interface Order {
public void execute();
}
接着创建Light
对象,来作为reveived的真正的命令执行对象,也就是对灯来进行对应的开或者关的相关操作。
package order;
public class Light {
void on() {
System.out.println("open the light");
}
void off() {
System.out.println("close the light");
}
}
接着就是来对命令进行封装,也就是说在这里仅仅看到execute()
来执行相关的操作,但是具体是进行什么操作,并不需要关注。也就是invoke要执行命令的入口。下面是进行的开灯指令。
package order;
public class OpenOrder implements Order {
private Light light;
public OpenOrder(Light light) {
this.light = light;
}
@Override
public void execute() {
light.on();
}
}
下面是进行的关灯指令。
package order;
public class CloseOrder implements Order {
private Light light;
public CloseOrder(Light light) {
this.light = light;
}
@Override
public void execute() {
light.off();
}
}
对应的命令都创建好了并且封装完毕,所以接下来就要进行执行操作,就要进行具体的执行命令的操作。这里是进行了一次开灯的操作和一次关灯的操作。可以看到,进行具体的操作调用的是execute
的方法,里面具体干了些什么,我们就不了了之了。
package order;
public class ControlLightDemo {
public static void main(String[] args) {
Light light = new Light();
OpenOrder openOrder = new OpenOrder(light);
CloseOrder closeOrder = new CloseOrder(light);
openOrder.execute();
closeOrder.execute();
}
}
下面是执行完的结果。
open the light
close the light
Tips
进行简单的总结。命令模式的设计能够很好地对执行命令的具体细节进行封装。这里写的比较简单,对应的execute方法就仅仅是执行了对应的开关灯操作。稍微复杂点进行设计,就比如在食品店的操作,可以将很多具体的实现步骤都封装在一个方法中,那么就能够很好地实现解耦。简单来说就是只看到了我的躯壳,而看不到我的内心
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!