当前位置:网站首页>命令模式(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();
}
}
边栏推荐
- Win11怎么重装显卡驱动程序?Win11显卡驱动怎么卸载重装?
- RL78 development environment
- MySQL:面试问的范式设计
- Events in August | 51CTO's 17th Anniversary Celebration, post a blog post to get gifts such as tea sets/notebooks/T-shirts!
- 浅析深度学习在图像处理中的应用趋势及常见技巧
- 航企纠缠A350安全问题 空客主动取消飞机订单
- A topic of map
- Multimedia and Internet of Things technology make the version "live" 129 vinyl records "Centennial Voice"
- Small program containers accelerate the construction of an integrated online government service platform
- [代码阅读] CycleGAN: Unpaired Image-To-Image Translation Using Cycle-Consistent Adversarial Networks
猜你喜欢

Maple 2022 software installation package download and installation tutorial

解析treeSet集合进行自定义类的排序

JUC (1) threads and processes, concurrency and parallelism, thread state, locks, producers and consumers

ThreadLocal详细分析

【Inspirational】The importance of review

HCIP 第十八天

深度学习100例 —— 卷积神经网络(CNN)天气识别

Use pytest hook function to realize automatic test result push enterprise WeChat

浅析深度学习在图像处理中的应用趋势及常见技巧

STM32前言知识总结
随机推荐
什么是终端特权管理
Mysql 存储引擎简介
C#/VB.NET:在 Word 中设置文本对齐方式
使用.NET简单实现一个Redis的高性能克隆版(二)
Servlet基础详细版
Why are all hotel bathrooms transparent?
手搓一个“七夕限定”,用3D Engine 5分钟实现烟花绽放效果
Multimedia and Internet of Things technology make the version "live" 129 vinyl records "Centennial Voice"
mae,mse,rmse分别利用sklearn和numpy实现
【Idea系列】idea配置
winform 在Datatable插入一笔数据
Win11怎么重装显卡驱动程序?Win11显卡驱动怎么卸载重装?
Heap Sort
Events in August | 51CTO's 17th Anniversary Celebration, post a blog post to get gifts such as tea sets/notebooks/T-shirts!
Business collocations
Introduction to Mysql storage engine
RL78 development environment
小程序容器加快一体化在线政务服务平台建设
航企纠缠A350安全问题 空客主动取消飞机订单
ThreadLocal详细分析