zoukankan      html  css  js  c++  java
  • 设计模式-命令模式

    一个比较简单的设计模式,主要有三种角色,请求者,中间者,接收者。将方法的请求和执行分隔开,两者之间通过中间对象来调用,为了方便拓展,需要将中间者抽象。

    请求者类

    public class Invoker {
        Command command;
    
        public Invoker(Command command) {
            this.command = command;
        }
        public void request(){
            command.excute();
        }
    }

    命令抽象类(中间者抽象)

    public interface Command {
        public void excute();
    }

    具体命令实现类

    public class Command1 implements Command {
        ReceiverA receiverA;
    
        public Command1(ReceiverA receiverA) {
             this.receiverA = receiverA;
        }
    
        @Override
        public void excute() {
       receiverA.action();
        }
    }

    接收者

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

    测试类

    public class Client {
        public static void main(String[] args) {
          //接收者
            ReceiverA receiverA = new ReceiverA();
            //具体命令传递者
            Command1 command1 = new Command1(receiverA);
            //请求者
            Invoker invoker = new Invoker(command1);
            invoker.request();
          //--------可以简化写成
            new Invoker(new Command1(new ReceiverA())).request();
        }
    }

    总结:请求者调用接收者的方法的时候不直接使用接收者对象,而是将自己的命令传递给命令传递者,这算是“黑盒”的一种改进,解除了请求者和接收者之间的耦合。坏处则是 如果有新的一个接收者,那么必须也要新建一个对应的具体命令类来实现调用。日常生活中可见的这种类型就是学校,如果学校多了一个班级的学生(接收者),校长(请求者)也无需直接管理,直接找一个新的老师来进行管理(新建命令类),校长从头到位都不用和学生接触。

    不和别人一样,不复制只真正理解
  • 相关阅读:
    webpack--前端自动化工具
    Vue--入门篇
    集千篇理论,终得深拷贝与浅拷贝的初解
    事件循环--eventloop
    对象的属性(变量+对象)
    集千篇理论精华,感悟对同步和异步的理解
    vue--先决篇
    js的基本语法规范
    python 模块加载错误总结
    Python logging模块无法正常输出日志
  • 原文地址:https://www.cnblogs.com/Vinlen/p/12784399.html
Copyright © 2011-2022 走看看