iphone 程序的设计模式

第一次接触ios,第一次接触oc ,完全跟着感觉走。。。。。

设计模式,看的头晕,写下来,应该不晕了吧大笑。iphone 常用的设计模式应该分为九种(书上抄来的。。。)

1.MVC模式      2.共享模式        3.目标和动作模式       4.通告模式       5.归档模式    6.子视图模式     7.委托模式    8.执行命令模式       9.代理模式

详解设计模式:

NO.1  MVC模式:

知道Java的都熟悉mvc模式,我感觉这里的mvc模式和Java的相似吧,学习起来不是太难理解。MVC把应用分为三个层:Modle  Layer(模型层)、View layer(视图层)、Controller Layer(控制层)。

View向Model发起状态查询操作将结果呈现给用户。当用户有所动作的时候,View 会通知控制器 Controller,Controller会发起状态改变的操作给Model,Model随后发出数据已改变的消息,通知View更新。MVC示意图:


模型对象封装了应用程序的数据、逻辑定义以及数据计算和处理。一个模型对象可以与其他模型对象有一对一或者一对多的关系。一个模型对象需要具备属性,和属性的存取方法。

视图对象的主要工作是显示模型对象里的数据,并编辑这些数据。Iphone os 的Appkit和UIkit框架提供了视图类的集合,并在interface builder的库里面提供了多个视图对象。

控制对象是视图对象和模型对象的中介,可以让视图对象了解模型对象的改变,并同时更改模型对象的数据。控制对象还可以实现应用程序安装和任务协调,还可以管理对象的生命周期。


此图是控制对象的预览图。程序委托对象作为系统层面和程序内在控制器的桥梁。

在MVC模式中,一个控制器物件翻译了使用者对View物件的动作和意图。

控制器对象分为三种:视图控制器,协调控制器和媒体控制器(针对Mac OS X)

导航条和分页条以及所有相关的呈现行为,都由视图控制物件管理和实现。视图控制器是UIViewController的子类的实例。基本上是针对许多框架对象的委托和数据源。

协调控制器监督并管理整个应用程序的职能。在 iphone OS中视图控制器还扮演了协调控制器的角色,主要功能如下:负责委托讯息和观擦通告。负责建立对象之间的连接,并且执行其他设定的工作。管理对象的生命周期。

No. 2 对象共享模式

对象共享就是一个单态类,是一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单态类,它的特点有:

(1)一个类只有一个实例(2)它必须自行创建这个实例(3)它必须向整个系统提供这个实例(3)不能外部实例化,也不能被继承。

无论应用程序请求多少次,单态模式类始终只返回一个实例。单态类通过工厂方法返回一个唯一的实例。实例一旦第一次创建以后就不会再创建。同时一个单态类实例不能被保持,复制和释放。Cocoa提供了很多的单态类,例如NSFileManager、NSWorkSpace、NSBundle。在UIkit类里面,UIapplication和UIAceelerometer也是单态类。

如果想获取一个NSFileManager的实例可以用一下代码:

NSFileManager *fm=[NSFileManager defaultManager];

defaultManager方式是NSFileManager类的类方法,因为单态类只有一个实例,objective-c中常常使用类方法机制来实现单态方法。

NO.3 目标和动作模式

目标-动作模式允许开发者通过定义目标对象和调用的方法来赋予一个用户动作一定的含义。目标和动作机制非常适合MVC设计模式,当用户操作视图上的控件一一对应,每个控件都是变量的目标。通常使用interface Builder来设置目标和动作。

No.4通告模式

通告模式的原型是设计模式中的观察者模式,在设计模式中观察者模式完美的将观察者和被观察者的对象分离开。 面向对象设计的一个原则是系统中每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事,并且将它做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。

实现观察者模式的时候要注意,观察者和被观察者之间的互动关系不能体现在类之间的直接调用,否则就将使观察者和被观察者之间紧密的耦合起来。实现观察者模式有很多种,比较直观的一种是使用“注册-通知-撤销注册”的形式。

被观察者注册 、被观察者发生改变,通知观察者、撤销观察者。

通告是建立在观察者模式的基础上的,其中通告中心相当于观察者,负责观察各种注册对象,当注册对象发生改变或者接受到某个消息时,它会发消息给通告中心,然后通告中心又会将此消息转发给其他对此消息感兴趣的注册对象。

No.5  归档模式

归档模式是指一种数据转换过程,就是将一组相互关联的对象转换为可存储及在应用程序间进行传递的形式。归档的最终结果是一份字节流文件。解档是相反的过程,是根据档案重新构建出完全相同的对象网络。归档为对象持久化提供了通用方案。应用程序经常使用归档类来实现诸如复制和粘贴这种剪贴板操作。

Foundation框架提供了两套类用于归解码对象网络。每套类都包含用于启动解档过程的方法以及用于编解码对象实例数据的方法。这些类的对象有时也会被称为归档器和解档器。

键归档器和键解档器,此类对象使用字符串作为键来标识待解码数据。开发者尤其是新应用程序的开发者,偏爱使用此类对象执行归、解档操作

顺序归档器和顺序解档器,“”旧风格“归档以某种顺序编码对象状态,解档也需按照相同的顺序。

应用程序可以调用NSKeyedArchiver类的archiveRootObject:toFile:方法来创建档案。解档按相反的方向进行。应用程序通过调用NSKeyedUnarchiver类的unarchiveObjectWithFile:方法来解档。这两个方法是处理数据对象不是处理文件。

No.6子视图模式

这种模式没有什么可以说的,就是每一个视图可以有一个或者多个子视图。每一个子视图可以有多个子视图。视图的概念可以使UI设计更灵活。

NO.7委托模式

委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。在Cocoa Touch使用委托的技术,就是当一个对象收到消息时,它会执行消息的任务托付给其他的对象来做,前者为委托对象,后者为受委托者。

No.8 执行命令模式

执行命令模式的目的是将一个请求封装为一个对象,从而使开发者可以用不同的请求对客户进行参数化,对请求有序排列或将请求记录下来,以及支持可撤销的操作。命令模式的主要思想就是把方法提升到类型的层次,这样对方法的执行有更多的控制力,这个控制力表现在对时间的控制力、对撤销的控制力和对组合行为的控制力。

No.9代理模式

代理模式一般主要用来解决为其他对象提供一种代理以控制对这个对象的访问。

代理对象一般有三种:

抽象对象。声明真实对象和代理对象的共同接口。

代理对象角色内部含有对真实对象的应用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。代理对象可以在执行真实对象操作时,附加其他操作,相当于对真实对象进行封装。

真实对象,代理角色所代表的真实对象,是我们最终要应用的对象。

代理模式在Cocoa touch中的主要目的是进行访问控制,这种模式可以用于一个可能是远程的、创建起来开销大的、或者需要保证安全的对象 创建代理对象,并在代理对象中为其提供访问控制的场合,它在结构上和装饰模式类型,但服务于不同的目的:装饰对象的目的是为另一个对象添加行为,而代理对象则是进行访问控制。

Cocoa Touch基础框架为代理模式的实现提供了类NSProxy.




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章