当前位置:网站首页>命令模式(Command)
命令模式(Command)
2022-08-04 10:52:00 【pmc0_0】
问题
我们要把将军(请求方)和士兵(执行方)分离开
- Receive接收者角色
该角色就是干活的角色,命令传递到这里是应该被执行的,具体到我们上面的例子中就是弓箭手和冲锋士兵的两个实现类。
- Command命令角色
需要执行的所有命令都在这里声明。
- Invoker调用者角色
接收到命令,并执行命令。将军就是这个角色。
命令模式比较简单,但是在项目中非常频繁地使用,因为它的封装性非常好,把请求方(Invoker)和执行方(Receiver)分开了,扩展性也有很好的保障,通用代码比较简单。先看一下Receiver类
模式引入
其实就是通过负责人发布命令,命令关联着具体的执行者,让执行者去执行自己的行为
package command;
/** * @author pangjian * @ClassName Receiver * @Description 命令实施类,相当于将军发布命令后,接收者实施命令 * @date 2022/7/29 22:00 */
public abstract class Receiver {
public abstract void doSomething();
}
package command;
/** * @author pangjian * @ClassName Soldiers * @Description 士兵,自己的业务是冲锋 * @date 2022/7/29 22:19 */
public class Soldiers extends Receiver{
@Override
public void doSomething() {
System.out.println("士兵冲锋");
}
}
package command;
/** * @author pangjian * @ClassName Archer * @Description 弓箭手,业务是发射弓箭 * @date 2022/7/29 22:17 */
public class Archer extends Receiver {
@Override
public void doSomething() {
System.out.println("弓箭手发射弓箭");
}
}
- 命令
package command;
/** * @author pangjian * @Interface Commod * @Description 命令接口 * @date 2022/7/29 21:58 */
public interface Command {
void execute();
}
package command;
/** * @author pangjian * @ClassName ConcreteCommand * @Description 具体命令1:弓箭手发射弓箭 * @date 2022/7/29 22:01 */
public class ConcreteCommand1 implements Command{
private Receiver receiver;
public ConcreteCommand1(Receiver receiver) {
this.receiver = receiver;
}
/** * @Description:命令类去驱动接收者实施命令 * @return void * @date 2022/7/29 22:31 */
@Override
public void execute() {
this.receiver.doSomething();
}
}
package command;
/** * @author pangjian * @ClassName ConcreteCommand2 * @Description 具体命令2: 士兵冲锋 * @date 2022/7/29 22:13 */
public class ConcreteCommand2 implements Command{
private Receiver receiver;
public ConcreteCommand2(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void execute() {
this.receiver.doSomething();
}
}
- 负责人
package command;
/** * @author pangjian * @ClassName Invoker * @Description 命令调用者(相当于将军) * @date 2022/7/29 21:59 */
public class Invoker {
private Command command;
/* * @Description: 相当于皇帝给你一个命令,将军然后命令发布 * @Param command: 命令 * @return void * @date 2022/7/29 22:11 */
public void setCommand(Command command) {
this.command = command;
}
/* * @Description: 命令执行 * @return void * @date 2022/7/29 22:12 */
public void action() {
this.command.execute();
}
}
测试
package command;
/** * @author pangjian * @ClassName Client * @Description TODO * @date 2022/7/29 22:01 */
public class Client {
public static void main(String[] args) {
Invoker invoker = new Invoker();
Receiver receiver = new Archer();
Receiver receiver1 = new Soldiers();
Command command1 = new ConcreteCommand1(receiver);
Command command2 = new ConcreteCommand2(receiver1);
invoker.setCommand(command1);
invoker.action();
invoker.setCommand(command2);
invoker.action();
}
}
边栏推荐
- 使用.NET简单实现一个Redis的高性能克隆版(二)
- linux下数据库初始化密码
- Super Learning Method
- Jenkins User Manual (1) - Software Installation
- MySQL core SQL: SQL structured query statements, library, table operation, CRUD
- 在 .NET MAUI 中如何更好地自定义控件
- Mysql——》类型转换符binary
- Win11文件类型怎么改?Win11修改文件后缀的方法
- 【机器学习】:如何对你的数据进行分类?
- Jina 实例秀|基于神经搜索的网络安全威胁检测(一)
猜你喜欢
数据化管理洞悉零售及电子商务运营——零售密码
【LeetCode】653. 两数之和 IV - 输入 BST
mae,mse,rmse分别利用sklearn和numpy实现
Graphical Hands-on Tutorial--ESP32 OTA Over-the-Air Upgrade (VSCODE+IDF)
Camunda整体架构和相关概念
A topic of map
C language * Xiaobai's adventure
如何直击固定资产管理的难题?
再次搞定 Ali 云函数计算 FC
Graphical Hands-on Tutorial--ESP32 One-Key Network Configuration (Smartconfig, Airkiss)
随机推荐
知网网站地址更换
mysql进阶(二十六)MySQL 索引类型
少即是多:视觉SLAM的点稀疏化(IROS 2022)
datax oracle to oracle增量同步
图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)
ROI LTV CPA ECPM体系讲解
Graphic and text hands-on tutorial--ESP32 MQTT docking EMQX local server (VSCODE+ESP-IDF)
JUC (1) threads and processes, concurrency and parallelism, thread state, locks, producers and consumers
ORB-SLAM3中的优化
WPF 截图控件之画笔(八)「仿微信」
江西发布紧急通知:全面开展涉校涉生安全隐患大排查
Mysql 存储引擎简介
3-5年以上的功能测试如何进阶自动化?
从零开始Blazor Server(7)--使用Furion权限验证
MySQL:完整性约束和 表的设计原则
Business collocations
C#/VB.NET:在 Word 中设置文本对齐方式
CompletableFuture接口核心方法介绍
C#/VB.NET:在 Word 中设置文本对齐方式
[easyUI]修改datagrid表格中的值