Model view controller MVC:为什么控制器是视图的策略

Model view controller MVC:为什么控制器是视图的策略,model-view-controller,design-patterns,strategy-pattern,design-principles,Model View Controller,Design Patterns,Strategy Pattern,Design Principles,以下是战略模式的定义: 策略-定义一系列算法,封装每个算法,并 使它们可以互换。策略允许算法变化 独立于使用它的客户端 所以,策略将功能分为两部分:一部分不会改变,另一部分在将来某个时间可以改变 在MVC中,他们说: 控制器是视图的策略 这意味着控制器是可变的,视图将来可能不会更改 我还不太明白。我认为他们两个都可以在未来改变 请给我解释一下人们为什么这么说。我想你可能已经看到了上一篇C3 wiki部分中的注释“控制器是视图的策略”,这很有趣,但有点简洁 在介绍中对这一想法进行了更全面的描述,其

以下是
战略模式的定义:

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

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

在MVC中,他们说:

控制器是视图的策略

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

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


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

我想你可能已经看到了上一篇C3 wiki部分中的注释“控制器是视图的策略”,这很有趣,但有点简洁

在介绍中对这一想法进行了更全面的描述,其中有关MVC的部分说:

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

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

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

总而言之,您可以使用具有不同控制器的同一视图在系统的不同部分具有不同的行为,您可以在运行时替换控制器以启用或禁用特定功能,并且控制器封装了更新模型的复杂交互