命令模式(Command)

将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。

这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。

 

结构:
  Clinet 客户端:下发命令的类,持有Command 命令类。

      大哥说:我渴了。

  Command 命令类:管理命令的类,持有Receiver 接收者。

      大哥的小甜心:大哥要喝水,现在是冬天,要准备热水,我从商店拿水过来,然后让人捂一捂,热了再给大哥喝。

  Receiver 接收者:执行命令的类。

      商店:提供水。


 

接收者:具体执行命令。

public class Receiver {
    public void action(){
        System.out.println(this.getClass().getName()+"开始执行任务");
    }
}

命令(接口):

public interface Command {
    void execute();
}

命令类:通过持有接收者的应用,可以调用接收者执行命令,在命令执行前后可以对命令进行处理。

class ConcreteCommand implements Command{
    private Receiver receiver;//真正的执行者

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

    @Override
    public void execute() {
        //在此次可以进行设计
        receiver.action();
    }
}

客户端:发起命令,持有命令类,通过命令类下发命令。

public class Invoke {
    private Command command;//持有命令

    public Invoke(Command command) {
        this.command = command;
    }

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

测试:

public class Client {
    public static void main(String[] args) {
        //命令管理对象,确定执行命令者
        Command command = new ConcreteCommand(new Receiver());
        //发布命令者,使用命令管理对象
        Invoke i = new Invoke(command);
        //下发命令
        i.call();
    }
}

运行结果:

 

posted @ 2022-11-26 17:50  在博客做笔记的路人甲  阅读(267)  评论(0编辑  收藏  举报