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

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

    不和别人一样,不复制只真正理解
  • 相关阅读:
    dubbo配置文件解读(1)
    Java同步与异步
    java垃圾回收
    Java中的String,StringBuilder,StringBuffer三者的区别
    ThreadLocal终极篇
    TCP/IP协议与HTTP协议(一)
    TCP/IP协议与HTTP协议(二)
    springcloud之断路器(Hystrix)
    解决mysql不能通过'/tmp/mysql.sock 连接的问题
    jQuery.extend 函数使用详解
  • 原文地址:https://www.cnblogs.com/Vinlen/p/12784399.html
Copyright © 2011-2022 走看看