设计模式——命令模式原理及代码实现

一、简介

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

简而言之就是将命令调用者和命令执行者通过命令对象解耦。

二、结构图

三、代码实现

1. Command

public abstract class Command {
    protected Receiver receiver;

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

    public abstract void execute();
}

2.ConcreteCommand

public class ConcreteCommand extends Command{
    public ConcreteCommand(Receiver receiver) {
        super(receiver);
    }

    @Override
    public void execute() {
        receiver.action();
    }
}

3.Invoke

public class Invoker {
    private Command command;

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

    public void execute() {
        command.execute();
    }
}

4.Receiver

public class Receiver {
    public void action() {
        System.out.println("执行请求!");
    }
}

5.Client

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.execute();
    }
}

四、总结

  1. 命令模式将发出请求的对象与执行请求的对象解耦。发起请求的对象是调用者,调用者只要调用命令对象的execute方法就可以让接收者工作,而不必知道具体的接收者对象是谁、是如何实现,命令对象会负责让接收者执行请求的动作,也就是说“请求发起者”和“请求执行者”之间的解耦是通过命令对象实现的。
  2. 容易设计一个命令队列,只要把命令对象放到队列中,就可以执行多线程的执行命令。
  3. 在需要的情况下,可以较容易地将命令记入日志。
  4. 新增具体命令类不影响其他的类。
  5. 可以容易地实现对请求的撤销和重做。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值