C# 命令模式混淆

标签 c# design-patterns

在不知不觉中,我一直在使用命令模式,其中客户端和调用者是相同的,它们直接调用命令。查看 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/

相关文章:

java - 两个不同的类加载器打破单例

c# - 在 ASP.NET Core Web Minimal API 中运行单独的进程

c# - 关于更新断开实体图的思考

c# - 如果 ConfigurAwait 设置为 False,任务不会进入故障状态

javascript - 使用 Kendo Grid 读取操作发布模型

ruby-on-rails - 根据传递的参数采取不同的操作 : best pattern to choose

c++ - C++ 中的变量全局常量 "macros"和最佳设计模式

c# - 升级到 .NET 6 时,Web Project 抛出运行时异常

java - 在 Java 对象之间复制数据的最快方法是什么?

php - 在 CRUD 中将创建和更新作为一项操作