Cocoa中的设计模式(MVC模式\委托模式\键值观察模式)

10 篇文章 0 订阅
10 篇文章 0 订阅

Cocoa是围绕着一系列设计模式所创建的,其目的是让开发者的工作更加协调和更加高效。


Cocoa中三个关键的模式

      1.模型-视图-控制器(MVC:model-view-controller)模式:
            Cocoa和Cocoa Touch 很大部分都是根据它构建的;
      2.委托(delegate)模式:
            它允许你的代码和Cocoa可以在“决定什么代码被谁运行”上高度灵活;
      3.键值观察(key-value observing)模式:

            它允许你的代码可以在不对其他对象进行检查的情况下观察到其他对象的变更。


MVC模式

      模型-视图-控制器设计模式是Cocoa中的基础设计模式之一。它将所有的对象都归结为三类:模型、视图、控制器(并因此得名)。
      - 模型(Model)是那些包含数据或者协助存储、管理,以及给其他对象传递数据的对象。模型可以简单到只是一个NSString,也可以复杂到是整个数据库。它们的目的是存储数据并提供数据给其他对象。一旦它们将数据给了其它对象后,便不再关心数据的变化,唯一关心的是管理数据如何存储。
      - 视图(View)是直接与用户交互、给用户提供信息和接收输入信息的对象。视图并不管理它们所显示的数据,它们只是将数据展示给用户。同时,视图在用户与对象交互时还负责发送通知给对象。如同模型与数据间一样,视图同样不关心接下来数据会发生什么,在通知完应用程序中其余部分后,其职责应终结。
      - 控制器(Controller)是作为模型与视图间媒介的对象,包含了应用程序中大量的称为“业务逻辑”的东西。实际逻辑定义了应用程序是什么以及它如何响应用户输入。最基本的,控制器负责从模型中获取信息然后提供给视图,它同样负责在得到视图通知用户与视图有交互时将信息提供给模型。

      为了给模型-视图-控制器模式一个实际例证,设想一个简单的文本编辑器。在本示例中,应用程序从磁盘中加载一个文本文件,然后在一个文本框中向用户呈现其内容。用户在文本框中进行修改,然后保存这些修改回到磁盘。
      我们将此应用程序分解为MVC对象:
      -其模型是一个负责从磁盘加载文本文件及将其写回磁盘的对象。它同样负责以NSString形式提供文本给任何请求它的对象。
      -其视图是文本框,它向另一个对象请求要显示的NSString,然后显示其文本。它同样接收来自用户的键盘输入,无论何时用户用键盘输入,它都会通知其他对象:文本已经被修改。当用户告诉它要保存修改时,它同样能再告诉其他对象。
      -其控制器是负责指示模型对象从磁盘加载文件,以及传递文本给视图的对象。当文本被更改时它接收来自视图的更新,然后将这些改变传递给模型。最后,它能够被视图告知用户已经请求保存修改;那时,它只是指示模型去完成将文件写入磁盘的实际操作。

      将应用程序分解成这些职责领域,使得修改应用程序更加容易。

      比如,如果开发者决定在应用的下一个版本添加在文本被修改时上传该文本文件到互联网的功能,必须修改的仅仅是模型类,控制器可以保持原有的内容,而试图则不需要更改。
      同样的,清晰地定义哪些对象负责哪些特定的功能,使得在保持项目中清晰的架构同时修改应用更加容易。如果开发者决定添加一个拼写检查的功能到应用程序,相应的代码显然要添加到控制器中,因为并不涉及文本如何呈现给用户或在磁盘中的存储(当然你可以添加一些功能到视图,使得它可以指示哪些词拼写错误,但大部分代码将需要添加到控制器中)。

委托

      ……待补充……



键-值观察

      MVC模式很大地依赖控制器在模型和视图相互间提供及时更新。要达到此目的的一种方式是定期地检查模型并询问它是否有任何更改,如果确实有的话,便向视图提供信息更新,此方式一般称为轮询。然而,这种轮询的方式,在模型不经常变更时效率低下,资源浪费,而恰恰在OS X和iOS应用程序中的大多数情况,模型通常是不经常变更的。为了能更高效地响应更改,Cocoa实现了一种称为键-值观察(key-value observing)的设计模式。
      在此模式中,对象可以注册为关于其他对象其属性的观察者。当那些其他对象更改了所被观察的属性时,那些观察者会得到通知。
      设计程序,当希望分离视图和对象模型时,键-值观察会变得很重要。

      ……更详细的介绍有待补充……


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值