MVC本身不是最基本的设计模式,它包含了若干更加基本的设计模式。在MVC 中,基本设计模式互相配合,确定了各项功能之间的协作,这是MVC应用程序的特性。
Cocoa Touch的MVC用到的模式有:组合、命令、中介者、策略和观察者。
组合
视图对象之间以协作的方式构成一个视图层次体系,其中既可以有复合视图(比如表格视图),也可以有独立视图(比如文本框或按钮)。每个层次的每个视图节点都可以响应用户的操作并把自己绘制到屏幕上。
命令
这是一种“目标-动作"机制,视图对象可以推迟其他对象(比如控制器)的执行,让其他对象等到发生了某些事件之后再执行,这一机制构成了命令模式。
中介者
控制器对象起着中间人的作用,而这个中间人则采用了中介者模式,它构成了在模型和视图对象之家传递数据的双向通道。应用程序的控制器对象将模型的变更传达给视图对象。
策略
控制器可以使试图对象的一个“策略”,视图对象将自己隔离,以期维持其作为数据展示器的唯一职责,而将一切应用程序持有的界面行为决定委派给它的“策略”对象(控制器)。
观察者
模型对象向它所关注的控制器等对象发出内部状态变化的通知,从而控制器将变更了数据模型传递给视图,更新视图。
这些模式协同工作流程:
- 用户在视图上用手指触摸或拖动,产生一个触摸事件。被触摸的实际视图就在视图组合中的某个层次上。视图将触摸消息传达给试图控制器。
- 控制器对象接收到触摸事件及其相关信息,然后应用策略来改变模型的状态,必要时请求视图对象根据此事件更新其行为或外观。
- 每当变更发生并已反映到模型对象,模型对象就会通知所有已注册的观察者对象,如控制器。
- 控制器就像一个协调人,它将变更了的数据从模型传递给视图,以便视图可以相应地更新其外观。