设计模式之命令模式(上)

命令模式
1)概述
1.定义

命令模式(Command Pattern) 将一个请求封装为一个对象,可以用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。

2.作用

命令模式可以将请求发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。

3.结构图

通过命令类来降低发送者和接收者的耦合度,请求发送者只需指定一个命令对象,再通过命令对象来调用请求接收者的处理方法。

在这里插入图片描述

4.角色

Command(抽象命令类):抽象命令类一般是抽象类或接口,在其中声明了用于执行请求的execute()等方法,通过这些方法可以调用请求接收者的相关操作。

ConcreteCommand(具体命令类):具体命令类是抽象命令类的子类,实现了在抽象命令类中声明的方法,它对应具体的接收者对象,将接收者对象的动作绑定其中,在实现execute()方法时,将调用接收者对象的相关操作(Action)。

Invoker(调用者):调用者即请求发送者,它通过命令对象来执行请求,一个调用者并不需要在设计时确定其接收者,因此它只与抽象命令类之间存在关联关系,在程序运行时可以将一个具体命令对象注入其中,再调用具体命令对象的execute()方法,从而实现间接调用请求接收者的相关操作。

Receiver(接收者):接收者执行与请求相关的操作,它具体实现对请求的业务处理。

5.核心

命令模式的本质是对请求进行封装,一个请求对应于一个命令,将发出命令的责任和执行命令的责任分割开。

命令模式的关键在于引入了抽象命令类,请求发送者针对抽象命令类编程,只有实现了抽象命令类的具体命令才与请求接收者相关联。

6.代码实现

抽象命令类

abstract class Command {
	public abstract void execute();
}

具体命令类

public class ConcreteCommand extends Command {
  //维持一个对请求接收者对象的引用
	private Receiver receiver; 
 
	public void execute() {
	  //调用请求接收者的业务处理方法action()
		receiver.action(); 
	}
}

请求发送者

public class Invoker {
	private Command command;
	
    //构造注入
	public Invoker(Command command) {
		this.command = command;
	}
	
    //设值注入
	public void setCommand(Command command) {
		this.command = command;
	}
	
	//业务方法,用于调用命令类的execute()方法
	public void call() {
		command.execute();
	}
}

请求接收者

public class Receiver {
	public void action() {
		//具体操作
	}
}

相关推荐

  1. 设计模式命令模式

    2024-04-04 05:30:02       34 阅读
  2. 【前端设计模式命令模式

    2024-04-04 05:30:02       65 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-04 05:30:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-04 05:30:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-04 05:30:02       82 阅读
  4. Python语言-面向对象

    2024-04-04 05:30:02       91 阅读

热门阅读

  1. ORACLE修改实例名和dbname方法

    2024-04-04 05:30:02       37 阅读
  2. Leetcode-1379-找出克隆二叉树中的相同节点-c++

    2024-04-04 05:30:02       33 阅读
  3. Oracle数据库安全管理与数据加密技术

    2024-04-04 05:30:02       33 阅读
  4. Oracle23免费版简易安装攻略

    2024-04-04 05:30:02       32 阅读
  5. 关于VueCli项目中如何加载调试Worker和SharedWorker

    2024-04-04 05:30:02       35 阅读
  6. Apache Doris 2.1.1 版本正式发布!

    2024-04-04 05:30:02       34 阅读
  7. github 多个账号共享ssh key 的设置方法

    2024-04-04 05:30:02       32 阅读
  8. 【记录】海康相机(SDK)二次开发时的错误码

    2024-04-04 05:30:02       120 阅读
  9. Generative AI for Beginners

    2024-04-04 05:30:02       38 阅读