Java设计模式架构算法设计模式和编程理论啦啦哩

设计模式之命令模式

2018-01-30  本文已影响2527人  爱红旗渠

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

源文地址:http://ihongqiqu.com/2016/09/13/Command-Design-Pattern/

适用场景

对于大多数请求响应模式的功能,比较适合使用命令模式,命令模式对实现记录日志、撤销操作等功能比较方便。

优点

  1. 它能容易地设计一个命令队列;
  2. 在需要的情况下,可以较容易地将命令记入日志;
  3. 允许接受请求的一方决定是否要否决请求;
  4. 可以容易地实现对请求的撤销和重做;
  5. 由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易。

缺点

增加系统的复杂性,这里的复杂性应该主要指的是类的数量

UML结构图

DecoratorPattern

源码

接受者,知道如何实施与执行一个与请求相关的操作。

public class Receiver {

    public void action() {
        System.out.println("执行操作");
    }

}

命令抽象类,用来声明执行操作的接口

public abstract class Command {

    protected Receiver receiver;

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

    public abstract void execute();
}

命令实现类,将一个抽象者对象绑定于一个动作,调用接受者响应的操作,以实现Execute

public class ConcreteCommand extends Command {

    public ConcreteCommand(Receiver receiver) {
        super(receiver);
    }

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

要求命令执行这个请求

public class Invoker {

    private Command command;

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

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

客户端调用

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

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

}

设计模式系列:

创建型 结构型 行为型
工厂方法
简单工厂
抽象工厂
建造者模式
单例模式
原型模式
组合模式
外观模式
桥接模式
代理模式
享元模式
适配器模式
装饰模式
策略模式
模板方法
状态模式
观察者模式
备忘录模式
迭代器模式
命令模式
职责链模式
解释器模式
访问者模式
中介者模式
上一篇 下一篇

猜你喜欢

热点阅读