设计模式-行为型-命令模式(Command)

定义

将一个请求封闭成一个对象,从而让你使用不同的请求把客户端参数化,对请求排除或者记录请求日志,可以提供命令的撤销和恢复功能

角色

抽象命令类(Command):声明需要执行的命令,一般要对外公布一个方法来执行命令

命令类:对抽象命令类中的方法进行实现

调用者(Invoker):负责调用命令

接收者(Receiver):负责接收并执行命令

客户端(Client):最终调用类

优点

  • 良好的封闭性(每个命令封装在一个命令类中)、扩展性
  • 降低对象之间的耦合度
  • 新的命令可以很容易地加入到系统中
  • 可以比较容易地设计一个组合命令
  • 调用同一方法实现不同的功能

缺点

  • 针对每一个命令都需要设计一个具体命令类,因此可能会导致系统存在大量的命令类
  • 命令过于简单时,本来几行代码可以搞定,这里就需要封装一个命令类

适用场景

  • 适用于大多数请求-响应模式的功能
  • 系统需要将请求调用者和请求接收者解耦时,可用命令模式使调用者和接收者不直接交互

类图

Command

package com.vapy.behavior.Command;

/**
 * 
 * @author vapy
 * 
 */
public abstract class Command {
    public abstract void execute();
}
package com.vapy.behavior.Command;

/**
 * 
 * @author vapy
 * 
 */
public class ConcreteCommand extends Command {
    private Receiver receiver;

    public ConcreteCommand(Receiver receiver) {
        this.receiver = receiver;
    }

    public void execute() {
        this.receiver.executeCommand();
    }
}
package com.vapy.behavior.Command;

/**
 * 
 * @author vapy
 * 
 */
public class Invoker {
    private Command command;

    public void setCommand(Command command) {
        this.command = command;
    }

    public void action() {
        this.command.execute();
    }
}
package com.vapy.behavior.Command;

/**
 * 
 * @author vapy
 * 
 */
public class Receiver {
    public void executeCommand() {
        System.out.println("执行命令");
    }
}
package com.vapy.behavior.Command;

/**
 * 
 * @author vapy
 * 
 */
public class Client {
    public static void main(String[] args) {
        Receiver receiver = new Receiver();
        Command command = new ConcreteCommand(receiver);

        Invoker invoker = new Invoker();
        invoker.setCommand(command);
        invoker.action();
    }
}

CommandResult
本文代码可在github查看:点击此处

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值