码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式-命令模式

时间:2020-04-27 09:21:53      阅读:43      评论:0      收藏:0      [点我收藏+]

标签:pre   err   拓展   命令模式   oid   求和   直接   main   日常生活   

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

请求者类

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

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

设计模式-命令模式

标签:pre   err   拓展   命令模式   oid   求和   直接   main   日常生活   

原文地址:https://www.cnblogs.com/Vinlen/p/12784399.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!