当前位置: 移动技术网 > IT编程>软件设计>设计模式 > 行为型模式之命令模式

行为型模式之命令模式

2018年12月06日  | 移动技术网IT编程  | 我要评论
命令模式(Command Pattern)又称为行动(Action)模式或交易(Transaction)模式。 定义: 将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或记录请求日志,可以提供命令的撤销和恢复功能。 命令模式类图如下所示。 命令模式中有如下4个角色。 命令( ...

命令模式(command pattern)又称为行动(action)模式或交易(transaction)模式。

定义:

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

命令模式类图如下所示。

命令模式中有如下4个角色。

  • 命令(command)角色:声明一个所有具体命令类的抽象接口,定义需要执行的命令。
  • 具体命令(concrete command)角色:定义一个接收者和行为之间的弱耦合,实现命令方法,并调用接收者的相应操作。
  • 调用者(invoker)角色:负责调用命令对象执行请求。
  • 接收者(receiver)角色:负责具体实施和执行一个请求。

 command.java

public interface command {
    // 执行命令的方法
    public void execute();
}

concretecommand.java

public class concretecommand implements command{
    private receiver receiver;
    public concretecommand(receiver receiver) {
        this.receiver = receiver;
    }
    // 执行方法
    @override
    public void execute() {
        this.receiver.action();
    }
}

receiver.java

public class receiver {
    // 行动方法
    public void action() {
        system.out.println("执行动作");
    }
}

invoker.java

public class invoker {
    private command command;
    // 接收命令
    protected void setcommand(command command) {
        this.command = command;
    }
    // 执行命令
    public void action() {
        this.command.execute();
    }
}

client.java

public class client {
    public static void main(string[] args) {
        // 调用者
        invoker invoker = new invoker();
        // 接收者
        receiver receiver = new receiver();
        // 定义一个发送给接收者的命令
        command command = new concretecommand(receiver);
        // 执行
        invoker.setcommand(command);
        invoker.action();
    }
}

优点:

  • 类间解绑。调用者角色与接收者角色之间没有任何依赖,调用者实现功能时只需调用command中的execute()方法即可,不需要了解是哪个接收者执行。
  • 可扩展性。command的子类可以非常容易地扩展,而调用者invoker和高层次的模块client不产生严重的代码耦合。
  • 命令模式结合其他模式会更优秀。命令模式可以结合责任链模式,实现命令族解析任务,结合模板实现方法,则可以减少command子类的膨胀问题。

缺点:

  • 可能会导致系统中出现过多的具体命令类,因此需要在项目中慎重考虑使用。

应用场景:

  • 只要你认为是命令的地方就可以采用命令模式,例如,在gui开发中,一个按钮的点击
    是一个命令,可以采用命令模式;模拟dos命令的时候,当然也要采用命令模式;触发-反
    馈机制的处理等。

摘自:

青岛东合信息技术有限公司 . 设计模式(java版) .  电子工业出版社,2012,142-146.

秦小波 . 设计模式之禅 . 机械工业出版社, 2014

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网