MVC。模型Model是应用对象,视图View是它在屏幕上的标识,控制器Controller定义用户界面对用户输入的响应方式。
MVC通过建立一个“订购/通知”协议来分离视图和模型。视图必须保证它的显示正确地反应模型的状态。一旦模型的数据发生变化,模型将通知有关的视图,每个视图相应地得到刷新自己的机会。这种方法可以让你为一个模型提供不同的多个视图表现形式,也能够为一个模型创建新的视图而无须重写模型。
它反映了将视图和模型分离的设计,然而这个设计还可用于解决:将对象分离,使得一个对象的改变能够够影响另一些对象,而这个对象并不需要知道那些被影响的对象的细节。这个更一般的设计被描述成 Observer (观察者模式)。
MVC的另一个特征是视图可以嵌套。MVC用View类的子类------CompositeView类来支持嵌套视图。CompositeView类的对象行为上类似于View类对象,一个组合视图可用于任何视图可用的地方,但是它包含并管理嵌套视图。
将一些对象划分为一组,并将该组对象当作一个对象来使用。这个设计被描述为Composite(组合模式),该模式允许你创建一个类层次结构,一些子类定义了原子对象(如 Button)而其他类定义了组合对象(CompositeView),这些组合对象是由原子对象组合而成的更复杂的对象。
MVC允许你在不改变视图外观的情况下改变视图对用于输入的响应方式。MVC将响应机制封装在Controller对象中。存在着一个Controller的类层次结构,使得可以方便地对原有Controller做适当改变而创建新的Controller。
View使用Controller子类的实例来实现一个特性的响应策略。要实现不同的响应策略只要用不同的种类的Controller实例替换即可。甚至可以在运行时刻通知改变View的Controller来改变View对用户输入的响应方式。例如,一个View可以被禁止接收任何输入,只需要给它一个忽略输入事件的Controller。
View---Controller关系是Strategy(策略模式)。一个策略是一个表述算法的对象。当你想静态或动态地替换一个算法,或你有很多不同的算法,或算法中包含你想封装的复杂数据结构,这时策略模式是非常有用的。