“封装发生变化的系统结构方面” 和“面向接口编程,而非面向实现编程”。例如,封装原则告诉咱们,若是隔离并封装系统中发生变化的部分,它们能够独立于系统其余部分进行变化,特别是若是为它们定义了不依赖实现特性的接口。稍后能够修改或扩展这些可变部分,而不影响系统的其余部分。这样一来,清除了各部分之间的互相依赖,减小了各部分的耦合性,系统就会变得更加灵活、更容易修改。编程
模型对象:模型对象封装了应用程序的数据,并定义操控和处理该数据的逻辑和运算。例如,模型对象多是表示游戏中的角色或地址簿中的联系人。用户在视图层中所进行的建立或修改数据的操做,经过控制器对象传达出去,最终会建立或更新模型对象。模型对象更改时(例如经过网络链接接收到新数据),它通知控制器对象,控制器对象更新相应的视图对象。设计模式
视图对象:视图对象是应用程序中用户能够看见的对象。视图对象知道如何将本身绘制出来,并可能对用户的操做做出响应。视图对象的主要目的,就是显示来自应用程序模型对象的数据,并使该数据可被编辑。网络
控制器对象:在应用程序的一个或多个视图对象和一个或多个模型对象之间,控制器对象充当媒介。控制器对象所以是同步管道程序,经过它,视图对象了解模型对象的更改,反之亦然。控制器对象还能够为应用程序执行设置和协调任务,并管理其余对象的生命周期。框架
在委托中,一个称为委托的对象应另外一个对象的请求,做为该对象的表明。做出委托的对象,一般是框架模型。在执行的某些时候,它会向其委托发送消息,告诉委托即将发生某些事件,并要求给它回应。委托(一般是自定类的实例)实施供该消息调用的方法,并返回相应的值。一般该值是一个 Boolean 值,告诉做出委托的对象是否继续操做。委托所以是一种将应用程序特定行为加入框架类工做的手段,而无需给该类建立子类。它是一种常见的、强大的设计,来扩展和影响框架的行为。可是委托并不局限于框架类。能够在应用程序的两个自定对象之间实施委托。Cocoa Touch 应用程序常见的设计,是将委托做为一种手段,容许子视图控制器将某些值(一般为用户输入的值)传达到父视图控制器。spa
有两个可编程的组件用于委托。委托类必须定义属性(经过名称为 delegate
的约定),以保存一个指向委托的参考。它还必须声明委托类必须采用的协议。线程
任何对象均可以观察通知,但要作到这一点,该对象必须注册,以接收通知。在注册时,它必须指定选择器,以肯定由通知传送所调用的方法;方法签名必须只有一个参数:通知对象。注册后,观察者也能够指定发布对象。设计
Cocoa Touch 和 Cocoa 框架也包含基于设计模式的其余设计,有如下模式:3d
视图层次。应用程序所显示的视图,会排列成层次结构(直观上基于包含)。此模式容许应用程序将单个视图和合成视图同等对待。层次的根部为一个窗口对象;根部如下的每一个视图,都有一个父视图,以及零个或多个子视图。父视图包含子视图。视图层次是绘图和事件处理的结构性组件。code
响应器链。响应器链是一系列的对象(主要是视图,但也有窗口、视图控制器和应用程序对象自己),事件或操做消息能够沿着响应器链传递,直到链中的一个对象处理该事件。所以,它是一个合做性事件处理机制。响应器链与视图层次密切相关。对象
视图控制器。虽然 UIKit 和 AppKit 框架都有视图控制器类,它们在 iOS 中尤为重要。视图控制器是一种特殊的控制器对象,用于显示和管理一组视图。视图控制器对象提供基础结构,来管理内容相关的视图并协调视图的显示与隐藏。视图控制器管理应用程序视图的子层次结构。
前台。在前台模式中,应用程序所执行的工做,从一个执行环境重定向(或弹回)到另外一个环境。(执行环境是一个与主线程或辅助线程相关联的调度队列或操做队列。)您将前台模式主要应用于这样的情形:在次队列执行的工做,产生了必须在主队列执行的任务,例如更新用户界面的操做。
类别。类别提供了一种方式,经过将方法添加到一个类,以使该类获得扩展。与委托同样,它可让您自定行为,而不子类化。类别是 Objective-C 的一个功能,在“编写 Objective-C 代码”中有说明。