设计模式之命令模式

作者: 爱红旗渠 | 来源:发表于2018-01-30 18:00 被阅读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();
        }
    
    }
    

    设计模式系列:

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

    相关文章

      网友评论

        本文标题:设计模式之命令模式

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