iOS 设计模式

突然发现对于设计模式这概念大家都不是很深刻(没错 包括我= =),在写这篇文章之前,我也有认真的去查有关的知识,在这里给大家总结一下我认为的iOS的设计模式。

MVC模式(要理解MVC概念问题,我觉得重要)

我在写代码时经常用到这种模式,原因很简单,这种模式层次清晰,简单明了,且易于维护。


MVC,即Model(数据模型)-View(视图)-Controller(控制器),通过数据模型、视图展示和控制器逻辑三者进行UI展现和数据交互的逻辑控制


介绍

MModel):数据模型。

通常负责存取数据,用于处理应用程序中逻辑的部分。


CController):控制器。

ControllerModelView沟通的桥梁。

当它需要数据的时候就会告诉Model,并控制Model在屏幕上的呈现方式。

当它需要UI展示和更新的时候就会告诉View


VView)视图。

Controller要使用的类,用于构建视图,通常是根据Model来创建视图的。


通信规则


1.Controller to Model

可以直接单向通信。

Controller需要将Model呈现给用户,因此需要知道Model的一切,要有同Model完全通信的能力,并且能任意使用Model的公共API


2.Controller to View

可以直接单向通信。

Controller通过View来布局用户界面。


3.Model to View OR View to Model

永远不能直接通信。

Model是独立于UI工作的,并不需要和View直接通信,View通过Controller获取Model数据。


4.View to Controller

可以间接通信。

View不能对Controller知道的太多。


Target action :首先,Controller会给自己留一个target,再把配套的action交给View作为联系方式。那么View接收到某些变化时,View就会发送actiontarget,从而达到通知的目的。这里 View只需要发送action,并不需要知道Controller如何去执行方法。


代理:有时候View没有足够的逻辑去判断用户是否符合规范,它就会把判断这些问题的权利委托给其他对象,它只需要获得答案就可以,并不会管是谁给的答案。


DataSourceView没有拥有它们所显示的数据的权利,View只能向Controller请求数据进行显示,Controller则获取Model的数据整理排版后提供给View


5.Model to Controller

Model本身信息发生了改变的时候,可以间接通信。


Notification & KVOModel信息改变时会给感兴趣的人广播消息,只要Controller接收到了这个广播时就会主动联系Model,获取新的数据并提供给View


优点

低耦合性;

有利于开发分工;

有利于组件重用;

可维护性。


需要注意以下几点

1.Model和View永远不能相互通信,只能通过Controller传递。

2.Controller可以直接与Model对话(读写调用Model),Model通过Notification和KVO机制与Controller间接通信。

3.Controller可以直接与View对话,通过outlet,直接操作View,outlet直接对应到View中的控件,View通过action向Controller报告事件的发生(如用户Touch我了)。Controller是View的直接数据源(数据很可能是Controller从Model中取得并经过加工了)。Controller是View的代理(delegate),以同步View与Controller。





二. Delegate模式

当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现时就需要用到代理。

代理模式有强大的解耦优势,在平日编写代码时被广泛应用。

代理模式可以对复杂对象进行修改而不需要子类化。与子类化不同的是,您可以照常使用复杂对象,而将对其行为进行修改的定制代码放在另一个对象中,这个对象就称为代理对象。复杂对象需要在预先定义好的时点上调用代理对象的方法,使其有机会运行定制代码。

代理通过protocol协议实现。(协议中有必须实现和需要实现两种方法,在这不一一举例了= =)


三. Target-action模式

Target-action模式同样具有很好的解耦合优势。

控件通过目标-动作模式将用户的交互通知给您的应用程序。当用户以预先定义好的方式(比如轻点一个按键)进行交互时,控件就会将消息(动作)发送给您指定的对象(目标)。接收到动作消息后,目标对象就会以恰当的方式进行响应(比如在按动按键时更新应用程序的状态)。


四. 观察者模式(NSNotificationCenter、KVO)

优势也是解耦合。

一般为model层对,controller和view进行的通知方式,不关心谁去接收,只负责发布信息。

实例:

NSNotificationCenter:获取通知中心对象;给通知中心发送一个消息;在一个对象被系统回收前,要清除掉自己的观察者身份。(任何位置可以发送消息,注册观察者的对象可以接收)。

KVO模式:由被观察的对象调用方法,添加观察者;一旦被观察的属性发生改变,系统会调用

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context方法;记得要解除自己的观察者身份。(键值对改变通知的观察者,平时基本没用过)


五. 单例模式

单例使用起来真的很不错。有使用简单,延时求值,易于跨模块等优点。

单例的含义是确保程序运行期某个类,只有一份实例,用于进行资源共享控制。

注意事项:确保使用者只能通过 getInstance方法才能获得,单例类的唯一实例。

java,C++中使其没有公有构造函数,私有化并覆盖其构造函数。

object c中,重写allocWithZone方法,保证即使用户用 alloc方法直接创建单例类的实例,返回的也只是此单例类的唯一静态变量。


六. 策略模式(工厂模式)
其实咱们编码代码时经常用到这模式,只不过大家对于专业的说法都不是很熟。= =
工厂模式就是抽象出一个基类,把不同的继承写成子类,这样所有子类都可以调用一个接口,大大降低代码的复杂度,并且使代码简单明了,清晰易懂。好了 说到这里大家应该都明了了= =

之前在博客里有看到过一篇有关工厂模式的介绍 有demo,在这里不说了= =
http://blog.csdn.net/xiazailushang?viewmode=contents

好了 差不多就这些 有错误又补充的欢迎来留言= =

有些demo之后整理会上传= = 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值