以下是Strategy Pattern
:
策略 - 定义一系列算法,封装每个算法,和 使它们可以互换。策略让算法变化 独立于使用它的客户。
因此,策略将功能分为两部分:一部分不会改变,另一部分可能在未来某个时间发生变化。
而且,在MVC中,他们说:
控制器是视图的策略
这意味着控制器是变化的,View将来可能不会改变。
我还不太了解。我想他们两个都可以在将来改变。
请解释一下为什么人们这么说。
答案 0 :(得分:6)
我怀疑你可能已经在Model View Controller As An Aggregate Design Pattern的C3维基部分看到了“控制器是视图策略”的注释,这很有趣,但有点简洁。
在Design Patterns的介绍中对这个想法进行了更全面的描述,其中关于MVC的部分说:
MVC还允许您更改视图响应用户输入的方式,而无需更改其可视化表示。例如,您可能想要更改它响应键盘的方式,或者让它使用弹出菜单而不是命令键。 MVC将响应机制封装在Controller对象中。有一个控制器的类层次结构,可以很容易地创建一个新控制器作为现有控制器的变体。
视图使用Controller子类的实例来实现特定的响应策略;要实现不同的策略,只需用不同类型的控制器替换实例。甚至可以在运行时更改视图的控制器,以使视图更改其响应用户输入的方式。例如,可以禁用视图,以便仅通过为其提供忽略输入事件的控制器来接受输入。
View-Controller关系是策略设计模式的一个示例。策略是表示算法的对象。当您想要静态或动态地替换算法时,当您有很多算法变体时,或者当算法具有您想要封装的复杂数据结构时,它非常有用。
总结一下,您可以使用不同控制器的相同视图在系统的不同部分中具有不同的行为,您可以在运行时替换控制器以启用或禁用特定功能,并且控制器封装复合体更新模型的交互。