Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 观察者和命令设计模式,为什么菜单通常使用命令模式?_Design Patterns_Command Pattern_Observer Pattern - Fatal编程技术网

Design patterns 观察者和命令设计模式,为什么菜单通常使用命令模式?

Design patterns 观察者和命令设计模式,为什么菜单通常使用命令模式?,design-patterns,command-pattern,observer-pattern,Design Patterns,Command Pattern,Observer Pattern,问题在于,为什么菜单通常使用命令设计模式而不是观察者模式来实现?有两个方面,即“调度”,从菜单中选择一个选项,或者单击一个按钮并运行一些代码。然后是实际运行的代码 我不知道您指的是哪个UI框架,但我希望在这两种情况下都能看到使用观察者模式和命令模式。我想知道是不是菜单框和按钮框只是由您的框架以使不同方面可见的方式实现的 因此,对于菜单,您提供了不同的命令对象,您实际上从未看到导致调用您的命令的内部调度。我猜在幕后一定发生了一些事件处理,所以观察者模式可能正在使用,只是你看不到而已 在button

问题在于,为什么菜单通常使用命令设计模式而不是观察者模式来实现?

有两个方面,即“调度”,从菜单中选择一个选项,或者单击一个按钮并运行一些代码。然后是实际运行的代码

我不知道您指的是哪个UI框架,但我希望在这两种情况下都能看到使用观察者模式和命令模式。我想知道是不是菜单框和按钮框只是由您的框架以使不同方面可见的方式实现的

因此,对于菜单,您提供了不同的命令对象,您实际上从未看到导致调用您的命令的内部调度。我猜在幕后一定发生了一些事件处理,所以观察者模式可能正在使用,只是你看不到而已


在button案例中,调用的代码可以看作是一个命令对象,但我们更明确地将其连接到事件,因此我们首先看到Observer模式。

我可以看到一个将Observer模式与菜单项或按钮一起使用的用例。假设有星座计算器。用户有一个按钮来开始星座生成。用户将单击按钮并向服务器发出命令进行计算。稍后,同一按钮可以观察服务器状态,反之亦然,用于状态更新或显示按钮中的打印和fire print命令。 观察者:事件需要调度。
命令:执行的操作。

我可以立即看到的一个原因是能够“撤消”操作。您认为如何使用观察者模式来实现它?事实上,按钮通常使用观察者模式,所以,如果我把问题反过来:为什么按钮使用观察者而不是命令模式?那么,为什么有一些小部件使用观察者模式和其他命令模式呢?