美文网首页
15、命令行模式(设计模式笔记)

15、命令行模式(设计模式笔记)

作者: yjaal | 来源:发表于2016-10-21 08:33 被阅读225次

    一、介绍

    • 命令模式:将一个请求封装为一个对象,从而使我们可用不同的请求对客户端进行参数化;对请求排队或者记录请求记录,以及支持可撤销的操作。也称之为:动作Action模式、事物Transaction模式

    二、结构

    • command抽象命令类
    • ConcreteCommand具体命令类
    • Invoker调用者/请求者
      • 请求的发送者,它通过命令对象来执行请求。一个调用者并不需要在设计时确定其接受者,因此它只与抽象命令之间存在关联。在程序运行时,将调用命令对象的execute(),间接调用接收者的相关操作。
    • Receiver接收者
      接收者执行与请求相关的操作,具体实现对请求的业务处理。未抽象前,实际执行操作内容的对象
    • Client客户类
      在客户类中需要创建调用者对象、具体命令类对象,在创建具体命令对象时指定对应的接收者。发送者和接收者之间没有直接关系,都通过命令对象间接调用。

    三、实例

    Receiver,java

    package cn.itcast.day246.command;
    //接收者
    public class Receiver {
        public void action(){
            System.out.println("接收者执行命令");
        }
    }
    

    Command.java

    package cn.itcast.day246.command;
    //命令处理的中转接口
    public interface Command {
        public void execute();// 这里是返回一个空,但是实际开发中我们可以添加多个不同的方法
    }
    
    // 实际中转类
    class ConcreteCommand implements Command {
    
        private Receiver receiver;// 命令的真正执行者,当然这里也可以使用一个容器来保存多个命令的接收者
    
        public ConcreteCommand(Receiver receiver) {
            this.receiver = receiver;
        }
    
        @Override
        public void execute() {
            // 调用前的相关处理
            //...
            
            receiver.action();
            
            // 调用前的相关处理
            //...
        }
    }
    

    Invoker.java

    package cn.itcast.day246.command;
    //命令的发起者
    public class Invoker {
        private Command command;// 当然这里我们也可以使用一个容器来保存多条命令
    
        public Invoker(Command command) {
            this.command = command;
        }
        
        //业务方法,用于调用命令类的方法
        public void call() {
            // 调用前的相关处理
            // ...
    
            command.execute();
    
            // 调用后的相关处理
            // ...
        }
    }
    

    说明:从上面可以看到,实际上命令处理类实际上就相当于一个中转站,它从一个或者多个命令发出者(Invoker )接收到一条或多条命令,然后分别发送到一个或多个接收者(Receiver),当然在接收到命令之后可以进行相关的处理(这里可以进行批处理),然后发送给接收者进行处理。

    相关文章

      网友评论

          本文标题:15、命令行模式(设计模式笔记)

          本文链接:https://www.haomeiwen.com/subject/cnjquttx.html