一、MVC
1、MVC-Model、View、Controller (模型、视图、控制器)。
MVC 是将应用中所有类组织起来的策略。将所有类归为三块,一块是模型,一块是视图,一块是控制器。
模型-模型对象维护应用的数据并定义数据操作的特定逻辑。模型实际上考虑的是“什么”,程序是什么,就是通过视图将模型呈现给用户。
视图-视图对象向用户展示信息并响应用户操作。模型是完全独立于UI的,模型绝对不能同视图这一块中的对象通信,视图需要使用控制器来为他们解释模型。视图对象可以与不同的模型对象合作,它们往往可在不同的应用程序之间复用并保持一致。
控制器-控制器对象是视图和模型对象的中间人,作为中间人或者协调人,它建立起视图和模型之间的沟通渠道,使视图能够知道模型的变更并给予响应。除了协调作用之外,控制器对象还可以为应用程序提供其他操作,比如为应用程序管理其他对象的生命周期,进行设置和协调任务。
2、MVC模型中各个模块的通信方式
controller对model和view具有拥有权。controller——>model;controller——>view;
view和model之间没有任何通信发生,视图不应该“拥有”它们所显示的数据,也就是说数据不应该是它们内部的属性。view通过controller来获取和解释模型。
view可以通过一种“盲”的方式同controller通信,这需要一种结构化的通信方式。视图和控制器之间的结构化通信方式,例如:一、目标动作方式。控制器在自身身上设置一个目标,视图会提供一个动作,就像一支箭一样,比如按钮视图,当用户按了按钮,就能往回同控制器通信,此时按钮视图并不知道接受这个信息的控制器是哪一个、什么样的控制器,这就是一种“盲”的通信方式。二、委托模式。有时 视图中发生的情况会更复杂一些,而控制器需要获知同步发生了什么,以滚动视图为例, 我在滚动 我想要控制器知道用户刚才“已经”滚动过,或者用户刚按到这里准备滚动,我要让控制器知道用户“将要”滚动,或者当用户触碰到视图的时候,滚动视图想知道 我“应该”允许滚动码 这是允许的吗。滚动视图自身都没有足够的逻辑去知道答案,于是它会将回答这些问题的权力委托给其他对象,它不知道这一对象的类 将要、应该、已经做这个或那个,这些就是这类委托协议中我们或看到的方法(协议是一种同另一种对象通信的盲方式)。
从模型到控制器,显然也是不允许的,因为控制器也是UI对象,模型对UI一无所知。那么模型到控制器的通信可以通过“电台”概念来理解。模型会使用这一概念来广播信息。
三、作为复合设计模式的MVC
MVC本身并不是最基本的设计模式,它包含了若干更加基本的设计模式。在MVC中,基本设计模式相互配合,确定了各功能之间的协作,这是MVC应用程序的特性。
Coach(Touch)的MVC用到的模式有:组合(Composite)、命令(Command)、中介者(Mediator)、策略(Strategy)和观察者(Observer)。
组合——视图对象之间以协作的方式构成一个视图层次体系,其中既可以有复合视图(比如表格视图),也可以有独立视图(比如文本框或按钮)。每个层次的每个视图节点都可以响应用户的操作并把自己绘制到屏幕上。
命令——这是一种“目标——动作”机制,视图对象可以推迟其他对象(比如控制器)的执行,让其他对象等到发生了某些事件后再执行。这一机制构成了命令模式。
中介者 ——控制器对象起着中间人的作用,而这个中间人则采用了中介者模式,它构成了在模型和视图对象之间传递数据的双向通道,应用程序的控制器对象将模型的变更传达给视图对象。
策略——控制器可以是视图对象的一个“策略”,视图对象将自身隔离,以期维持其作为数据展示器的唯一职责,而将一切应用程序特有的界面行为的决定委派给它的“策略”对象(即控制器)。
观察者——模型对象向关注它的控制器等对象发出内部变化的通知。
说明:以上内容 结合iOS斯坦福视频课程和《OC编程之道》一书的内容总结而成。
源:http://blog.csdn.net/Shan_Wangwang/article/details/79526264
网友评论