在不知不觉中,我一直在使用命令模式,其中客户端和调用者是相同的,它们直接调用命令。查看 DoFactory 上的定义后,我有点糊涂了。
有单独的命令。这与我幼稚的理解并没有改变。我想调用者只是调用了所有命令。但是接收器的目的是什么?我不明白。
如果可能,谁能给我一个包含多个命令的示例以及如何着手实现?
最佳答案
Command的基本意图模式正在将一些类(具体命令类)的基本(最重要)操作与其真正的消费者(CommandHandler)解耦。
所以我们正在使用基于多态性的变通方法。我们定义了一个抽象的 Command 类,它有一个名为 void excecute(){}
的方法,因此它不会对任何方法参数或返回类型变得严格。因此,具体的 Command 类可以在该方法中实现其类特定的实现,并且 CommandHandler 可以自由调用 someCommandObject.execute();
而无需知 Prop 体类到底是(作为命令类就足够了)。所以调用和实现几乎是分离的。您可以在未来轻松引入另一个实现 void execute(){}
的具体 Command 类,CommandHandler 仍然可以使用 someCommandObject.execute();
调用它。这就是命令模式的美妙之处。
这与我们在 Java 线程中的 Thread.run()
和 C# 线程中的 Task.Run()
中完全相同。
尽管您可以根据自己的方便使用Receiver,但这有点超出命令模式的范围。在您的计算器示例中,拥有一个 Receiver 是有意义的,因为所有具体的 Command 类都可以引用它来执行它们的主要操作(execute()
)。
你可以从here中看到一些例子和 there ,其中没有使用接收器。在有意义的地方使用 Receiver 是非常完美的。但是不要将其与真正的命令模式混淆。 :))
关于C# 命令模式混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40023421/