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)
start()
方法调用的ConcreteCommand implementaiton(它调用run()
方法)Receiver是否在这里失踪?或者MyRunnable是否扮演ConcreteCommand和Receiver的角色?
Receiver是可选的,具体取决于ConcreteCommmand是否拥有要执行的业务逻辑。从这本书的第238页开始,
一个命令可以具有多种能力。在一种极端情况下,它仅定义接收者和执行请求的操作之间的绑定。在另一个极端,它自己实现一切,而不委托给接收者。
在最初的问题中,我们看到一个没有接收器的示例,因为MyRunnable
拥有要执行的逻辑。在此处的其他两个答案中,我们看到委托给名为Receiver
和的显式接收者的示例Account
。