设计模式(14)-命令模式

简介

为什么要使用命令模式

在软件设计中,经常需要向某些对象发送请求,但并不知道具体是哪个对象接收请求,也不知道请求的操作是什么,只有在程序运行时才知道请求的接受者是哪个对象。这时,就可以使用命令模式来设计。命令模式可以对发送者和接受者进行解耦,发送者和接受者之间没有直接调用关系,使对象之间的调用更加灵活。

什么是命令模式

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

别名

动作(Action)模式、事务(Transaction)模式。

类型

对象行为型模式

遵守的原则

迪米特法则、开闭原则

角色

角色

  • Command: 抽象命令类
    • 抽象类或者接口
    • 声明了用于执行请求的execute()等方法,在方法中可以调用接受者的方法。
  • ConcreteCommand: 具体命令类
    • 具体类
    • 实现了抽象命令类的方法。
    • 含有请求接受者的引用,可以调用请求接受者的方法。
  • Invoker: 调用者
    • 具体类
    • 请求的发送者
    • 通过命令类对象来执行请求。和抽象命令类之间存在关联关系,在程序运行时可以将一个具体命令对象注入其中,再调用具体命令对象的execute()方法,从而实现间接调用请求接收者的相关操作。
  • Receiver: 接收者
    • 具体类
    • 处理请求,实现具体的业务操作。
  • Client:客户类
    • 客户。创建一个具体命令对象并制定它的接受者。

UML类图

设计模式(14)-命令模式_第1张图片

代码实现

  • 新建接收者Receiver.java
  • 新建抽象命令类Command.java
  • 新建具体命令类ConcreteCommand.java
  • 新建调用者Invoker.java
  • 新建客户类Client.java

接收者Receiver.java

class Receiver {
    public void action() {
        // 处理请求,实现具体的业务操作
        System.out.println("Receiver.action()");
    }
}

抽象命令类Command.java

abstract class Command {
    public abstract void execute();
}

具体命令类ConcreteCommand.java

 
 

你可能感兴趣的:(24种设计模式,设计模式,命令模式,command,对象行为型模式)