十四、命令模式

  • 目的 : 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
  • 核心 : 定义命令接口(含execute()方法)。具体命令对象封装了接收者对象和动作。调用者(Invoker)持有命令对象并调用其execute()。客户端配置调用者和具体命令。
  • 场景 :常用于实现撤销(Undo)功能,如文本编辑器的撤销操作.

首先得有一个接收者

java 复制代码
package command;

/*
  接收者类,负责执行具体的操作
  命令模式解耦的是"调用者"与"接收者",而不是"命令"与"接收者"
 */
public class Receiver {
	public void action(){
		System.out.println("receiver do something.");
	}
}

然后有一个命令接口

java 复制代码
package command;

//命令接口,定义执行操作的统一方法

public interface ICommand {
	void execute();
}

接着是具体命令类

java 复制代码
package command;

// 具体命令类,实现命令接口,绑定接收者

public class ConcreteCommand implements ICommand {

	private Receiver receiver;

	public ConcreteCommand(Receiver receiver) {
		this.receiver = receiver;	// 依赖注入
	}

	// 执行命令,调用接收者的具体操作
	@Override
	public void execute() {
		this.receiver.action();		// 命令绑定接收者
	}
}

最后就是我们的调用者了

java 复制代码
package command;

// 调用者类,负责调用命令

public class Invoker {

	private ICommand command;
	
	public Invoker(ICommand command){
		this.command = command;
	}
	
	public void invoke(){			// 调用命令执行
		this.command.execute();
	}
}

函数入口

java 复制代码
package command;

public class MainTest {
	public static void main(String[] args) {

		Receiver receiver = new Receiver();     			 // 创建接收者

		ICommand command = new ConcreteCommand(receiver);    // 创建命令对象,并绑定接收者

		Invoker invoker = new Invoker(command);		         // 创建调用者,并设置命令

		invoker.invoke();					      		     // 调用命令执行
	}
}
相关推荐
2401_878820473 分钟前
Sa-Token基础篇
java·spring boot·后端·sa-token
2301_816374336 分钟前
Nginx下构建PC站点
java·运维·nginx
无所事事O_o14 分钟前
JAVA应用不定时卡顿问题排查过程记录
java·优化
幸福巡礼29 分钟前
【LangChain 1.2 实战(八)】Agent Middleware 实战 —— 动态路由、监控、安全与容错
java·安全·langchain
Byron__1 小时前
Java JVM核心知识点复习笔记
java·jvm·笔记
程序员小白条1 小时前
别盲目卷算法!2026 程序员\&大学生,最稳的 AI 技术进阶路线全梳理
java·网络·人工智能·网络协议·http·面试
启山智软1 小时前
【 商城系统源码:Java与PHP的区别】
java·开发语言·php
练习时长两年半的程序员小胡1 小时前
Java程序员转大模型应用开发专题(一):核心基础概念
java·开发语言·transformer·自注意力
weixin_lizhao1 小时前
50天独立打造企业级API网关(二):安全防护体系与弹性设计
java·spring boot·安全·spring cloud·gateway
逸Y 仙X2 小时前
文章二十四:Elasticsearch查询排序应用实战e
java·大数据·数据库·elasticsearch·搜索引擎·全文检索