Command(命令)

Command(命令) 行为型 对象 1

Intent_意图2

将“请求”封装成对象,以使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作

Motivation_动机3

在系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场景下,如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计其适合性不高

Applicability_适用性4

在某些场合,需要对行为进行“记录、撤销/重做、事务”等处理,在此情况下,将“行为请求者”与“行为实现者”解耦

Structure_结构5

在这里插入图片描述

Participants_参与者6

  • Client(客户) 创建一个具体命令对象并确定其接收者
  • Command(命令) 声明了一个给所有具体命令类的抽象接口
  • ConcreteCommand(具体命令) 命令接口的实现,通常代表一个具体的命令
  • Invoker(请求者) 负责调用命令对象执行请求
  • Receiver(接收者) 负责具体实施和执行一个请求

Collaborations_协作7

  1. Client创建ConcreteCommand对象,并确定Receiver
  2. Command给所有的ConcreteCommand对象,定义抽象接口,声明执行方法(及撤销方法)
    -> 一般定义execute()为执行方法,undo()为撤销方法
  3. ConcreteCommand实现Command接口定义的方法,调用Receiver的相应操作
    -> 实现execute()方法,负责调用接收者的相应操作。execute()方法通常叫做执行方法
  4. Invoker接收并执行Command的执行方法
    -> 相关方法称为action(行动)方法
  5. Receiver具体实施和执行Invoker发出的请求
    -> 任何一个类都可以成为Receiver
    -> 实现和执行请求的方法叫做action(行动)方法

Comsequences_结果8

  • 优点
    降低系统耦合度
    更好的扩展性
    更动态的控制
  • 缺点
    具体命令过于繁复
  • 用途

Implementation/Sample Code_实现/范例代码910

Implementation

Receiver

public class Receiver {
   
	// 执行操作的实际方法
	public void action() {
   
		System.out.println("receiver execute");
	}
	public void undoAction() {
   
		System.out.println("receiver undo")
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值