2

这是 的定义Strategy Pattern

策略 - 定义一系列算法,封装每个算法,并使它们可互换。策略让算法独立于使用它的客户而变化。

因此,策略将功能分为两部分:一个不会改变,另一个可以在未来某个时间改变。

而且,在 MVC 中,他们说:

控制器是视图的策略

这意味着控制器是变化的,并且视图将来可能不会改变。

我还不太明白。我认为他们两个都可以在未来改变。

请为我解释为什么人们这么说。

4

1 回答 1

8

我怀疑您可能已经在Model View Controller As An Aggregate Design Pattern的 C3 wiki 部分中看到“控制器是视图的策略”的注释,这很有趣,但有点简洁。

在Design Patterns的介绍中更完整地描述了这个想法,其中关于 MVC 的部分说:

MVC 还允许您更改视图响应用户输入的方式,而无需更改其视觉呈现。例如,您可能想要更改它对键盘的响应方式,或者让它使用弹出菜单而不是命令键。MVC 将响应机制封装在一个 Controller 对象中。控制器有一个类层次结构,可以很容易地创建一个新的控制器作为现有控制器的变体。

视图使用 Controller 子类的实例来实现特定的响应策略;要实现不同的策略,只需用不同类型的控制器替换实例即可。甚至可以在运行时更改视图的控制器,让视图改变它响应用户输入的方式。例如,可以禁用视图,使其不接受输入,只需给它一个忽略输入事件的控制器。

视图-控制器关系是策略设计模式的一个例子。策略是表示算法的对象。当您想要静态或动态替换算法时,当您有很多算法变体时,或者当算法具有要封装的复杂数据结构时,它很有用。

总结一下,你可以使用相同的视图和不同的控制器在系统的不同部分有不同的行为,你可以在运行时替换控制器来启用或禁用特定的功能,控制器封装了更新的复杂交互该模型。

于 2012-04-08T16:27:18.987 回答