《Objective-C编程之道:iOS设计模式解析》学习笔记——第1章

来源:互联网 发布:北大青鸟陈璇java视频 编辑:程序博客网 时间:2024/05/18 23:57

《Objective-C编程之道:iOS设计模式解析》学习笔记——第1章

第1章:你好,设计模式

一:模型、视图、控制器(MVC)

模型:

模型对象维护应用程序的数据,并定义操作数据的特定逻辑。模型对象可以复用,因为它表示的知识适用于特定的问题领域。例如,模型对象可以表示复杂的数据结构,对应于用户在屏幕上所画的图形,或者仅仅表示待办事项应用程序中的一条待办事项。

视图:

视图对象可以响应用户操作,并懂得如何将自己展现在屏幕上。视图对象通常从应用程序的模型对象获取数据用以展示。它可以跟一个模型对象的部分、整体或者多个模型对象合作。通常,用户可以通过它修改数据。

控制器:

控制器对象就像视图对象和模型对象的中间人。作为中间人或协调人,它建立起沟通渠道,使视图得以知晓模型的更变而给予响应。

二:作为复合设计模式的MVC

MVC本身并不是最基本的设计模式,它包含了若干更加基本的设计模式。
Cocoa(Touch)的MVC用到的模式有:

  • 组合——视图对象之间以协作的方式构成一个视图层次体系,其中既可以有复合视图(比如表格视图),也可以有独立视图(比如文本框或按钮)。每个层次的每个视图节点都可以响应用户的操作并把自己绘制到屏幕上。
  • 命令——这是一种“目标-动作”机制,视图对象可以推迟其他对象(比如控制器)的执行,让其他对象等到发生了某些时间后再执行。这一机制构成了命令模式。
  • 中介者——控制器对象起着中间人的作用,而这个中间人则采用了中介者模式,它构成了在模型和视图对象之间传递数据的双向通道。应用程序的控制器对象将模型的变更传达给视图对象。
  • 策略——控制器可以使视图对象的一个“策略”。视图对象将自身隔离,以期维持其作为数据展示器的唯一职责,而将一切应用程序特有的界面行为的决定委派给它的“策略”对象(既控制器)。
  • 观察者——模型对象向它所关注的控制器等对象发出内部状态变化的通知。

三:影响着设计模式的设计原则

设计模式是经时间证明为有效的,对特定面向对象设计问题主要方面的一种抽象,体现了面向对象设计的重要思想。有些设计原则影响着设计模式。这些原则是构建可复用、可维护的面向对象应用程序的经验法则:

  • 针对接口编程而不是针对实现编程。
  • 优先使用对象组合而不是类继承。

四:设计原则的优缺点

针对接口编程的好处:

  • 只要对象符合客户端所要求的接口,客户端就不必在意所使用的确切类型。
  • 客户端只知道定义接口的协议或者抽象类,因此客户端就不必在意所使用的确切类型。

类继承的优缺点:(白箱复用)
优点:

  • 类继承简单直接,因为关系在编译时静态定义。
  • 被复用的实现易于修改

缺点:

  • 因为类继承在编译时定义,所以无法在运行时变更从父类继承来的实现。
  • 子类的部分描述常常定义在父类中。
  • 子类直接面对父类实现的细节,因此破坏了封装。
  • 父类实现的任何变更都会强制子类也进行变更,因为它们的实现联系在了一起。
  • 因为在新的问题场景下继承来的实现已过时或不适用,所以必须重写父类或继承来的实现。

对象组合的优缺点:(黑箱复用)
优点:

  • 不会破坏封装,因为只通过接口来访问对象。
  • 大大减少实现的依存关系,因为对象的实现是通过接口来定义的。
  • 可以在运行时将任意对象替换为其他同类型的对象。
  • 有助于保持类的封装以专注于单一任务。
  • 类及其层次结构能保持简洁,不至于过度膨胀而无法管理。

缺点:

  • 设计中涉及较多对象。
  • 系统的行为将依赖于不同对象之间的关系,而不是定义于单个类中。
  • 理想情况下,不需要创建新的组件就能实现复用;十分罕见的情况是,通过对象组合的方式,仅仅对已有的组件进行组合就能得到所需的全部功能;实际上,现成的组件总是不太够用。
  • 尽管有以上缺点,对象组合仍然对系统设计有诸多好处。我们可以通过在某些部分使用类继承来克服这些缺点,使得利用已有组件创建新的组件较为容易。
  • 优先使用对象组合而不是类继承,并不是说完全不使用类继承。需要根据具体情况对如何复用类和对象作出清晰的判断。
原创粉丝点击