zoukankan      html  css  js  c++  java
  • 命令模式笔记

    定义

    命令模式是将「请求」封装成对象,尝试以对象来代表实际行动。命令对象可以把行动及其参数封装起来,使这些行动可以被:重复多次取消取消后又再重做

    使用

    命令模式通常由commandreceiverinvokerclient组成。

    invoker命令调用者持有一个command命令对象,并在特定时刻触发命令对象的execute()方法,指令请求的命令。

    receiver命令接收者知道如何进行具体的执行操作(action()方法)。

    具体的command命令对象定义了具体动作和接收者之间的绑定关系,它持有一个receiver命令接收者对象,当invoker调用了commandexecute()方法时,其调用receiveraction()方法来执行具体动作。

    client对象负责创建具体的command对象,并设置其receiver对象。

    代码(Java)

    // 命令接口
    public interface Command {
        void execute();
    }
    ​
    // 具体的命令类
    public class ConcreteCommand implements Command {
        private Receiver receiver;
    ​
        public ConcreteCommand(Receiver receiver) {
            this.receiver = receiver;
        }
        @Override
        public void execute() {
            receiver.action();
        }
    }
    ​
    // 调用者
    public class Invoker {
        Command command;
    ​
        public Invoker(Command command) {
            this.command = command;
        }
        public void invoker() {
            command.execute();
        }
    }
    ​
    // 命令接受者
    public class Receiver {
        public void action() {
            System.out.println("Receiver start action");
        }
    }
    ​
    // Client 测试类
    public class Client {
        public static void main(String[] args) {
            Receiver receiver = new Receiver();
            Command command = new ConcreteCommand(receiver);
            Invoker invoker = new Invoker(command);
            invoker.invoker();
        }
    }

    总结

    命令模式可以让命令的请求者和接收者之间解耦,在被解耦的两者之间是通过添加一个中间层--命令对象进行沟通的。

  • 相关阅读:
    Dijjer:给流媒体插上 P2P 的同党
    gnomecolorchooser:桌面颜色设置小对象
    LXPanel:轻巧疾速的桌面面板
    批量创立缩略图
    SPE IDE:跨平台的 Python IDE
    主管的信
    使用 TRegistry 类[2]: 读取 IE 浏览器的 Start Page
    用多媒体库 Bass.dll 播放 mp3 [15] 设置与获取播放速度
    用多媒体库 Bass.dll 播放 mp3 [14] 频率均衡器
    用多媒体库 Bass.dll 播放 mp3 [13] 混响(Reverb)效果
  • 原文地址:https://www.cnblogs.com/zawier/p/6946223.html
Copyright © 2011-2022 走看看