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

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

    不和别人一样,不复制只真正理解
  • 相关阅读:
    int ,long , long long类型的范围
    距离统计 CH Round #49
    A1087. 高精度加法
    NOIP2010 提高组 机器翻译
    maven学习笔记
    logback学习资料
    UTF8带BOM和不带BOM(转载)
    java IO存在问题
    01——java IO流
    C++网络爬虫设计与分析
  • 原文地址:https://www.cnblogs.com/Vinlen/p/12784399.html
Copyright © 2011-2022 走看看