设计模式-命令模式

Posted vinlen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-命令模式相关的知识,希望对你有一定的参考价值。

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

请求者类

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

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

以上是关于设计模式-命令模式的主要内容,如果未能解决你的问题,请参考以下文章

是否有在单个活动中处理多个片段的 Android 设计模式?

尝试使用片段保存夜间模式状态

Sublime text3最全快捷键清单

Sublime text3最全快捷键清单

csharp C#代码片段 - 使类成为Singleton模式。 (C#4.0+)https://heiswayi.github.io/2016/simple-singleton-pattern-us

java 查看寻呼机设计模式与片段。