使用Runnable类的java命令模式示例:Receiver是否丢失?

Rav*_*abu 7 java multithreading design-patterns command-pattern runnable

Java核心库问题中的GoF设计模式的例子中可以看出

java.lang.Runnable的所有实现都是Command模式的示例.

根据我对Command模式的理解,

客户端调用Invoker => Invoker调用ConcreteCommand => ConcreteCommand调用Receiver方法,该方法实现抽象的Command方法.

看看这个工作示例

从命令图案UML图本文如下所示.

在此输入图像描述

看看这段代码:

public class ThreadCommand{
    public static void main(String args[]){
        Thread t = new Thread(new MyRunnable());
        t.start();
    }
}
class MyRunnable implements Runnable{
    public void run(){
        System.out.println("Running:"+Thread.currentThread().getName());
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. ThreadCommandClient
  2. Runnable接口是Command
  3. MyRunnableConcreteCommmand
  4. 线程祈求start()方法调用的ConcreteCommand implementaiton(它调用run()方法)

Receiver是否在这里失踪?或者MyRunnable是否扮演ConcreteCommand和Receiver的角色

jac*_*646 4

Receiver是可选的,具体取决于ConcreteCommmand是否拥有要执行的业务逻辑从这本书的第238页开始,

一个命令可以具有多种能力。在一种极端情况下,它仅定义接收者和执行请求的操作之间的绑定。在另一个极端,它自己实现一切,而不委托给接收者。

在最初的问题中,我们看到一个没有接收器的示例,因为MyRunnable拥有要执行的逻辑。在此处的其他两个答案中,我们看到委托给名为Receiver和的显式接收者的示例Account