2

我最近阅读了有关命令模式的信息

此模式用于“表示和封装以后调用方法所需的所有信息”。

从 C# 委托“创建封装方法调用 + 目标对象详细信息的对象”有什么区别?这些不是都提供相同(或非常相似)的功能吗?

4

3 回答 3

3

它非常相似,但我认为它是相反的。

命令是其他东西调用目标委托或对象的地方。事件是对n 个订阅者的广播。

另一个区别是事件的所有者不必知道所有不同的订阅者。

WPF 都有命令和事件。假设你有一个按钮。您可以订阅该Click事件,或者您可以Command在您的视图模型中有一个在单击按钮时会被调用的事件。

于 2012-05-05T21:08:23.657 回答
3

C# 中的事件实际上是观察者模式的实现。

观察者和指挥者之间的区别主要在于他们试图解决的问题。在命令模式中,目的是将执行动作的决定与执行动作分开。观察者模式的要点是通知感兴趣的各方发生了一些事情,而不必知道观察者的类型和数量,或者甚至可能根本不知道它们是否存在。

也就是说,放置在事件处理程序上的代表是命令。但是,这是一个实现细节,而不是事件的重点。如果您阅读观察者的文章,

于 2012-05-08T11:36:04.383 回答
1

实际上,最接近这种模式的 C# 特性是委托,而不是事件......

是的,它非常相似,但是命令模式支持更复杂的场景(例如撤消/重做的实现)

于 2012-05-05T21:09:28.967 回答