iOS开发框架中的设计模式

来源:互联网 发布:校园表白墙网站源码 编辑:程序博客网 时间:2024/05/17 07:11

前言

设计模式是一个软件开发领域的经典话题。在项目开发中灵活的运用设计模式解决问题,是每个开发人员努力的方向。随着技术的发展,涌现出越来越多的开发框架通过应用设计模式来来帮助开发人员提高开发速效率,提高系统的可维护性和扩展性。在iOS开发中框架Cocoa中就有不少经典的设计模式的应用场景,研究和学习这些应用场景,对于提高对设计模式的理解,对Cocoa框架的理解甚至为以后自己写框架打基础,都是用帮助的。下面系统梳理一下Cocoa框架中的设计模式:

1. MVC

不论是Web开发还是应用开发,MVC都是常见的框架级的设计模式。更严谨的说,MVC其实是一个设计模式的组合。

在Cocoa中,xib或storyboard文件用来做界面布局,是MVC中的View。 UIViewController及其子类,用来做用户交互的响应处理,页面跳转,同步View层和Model层的数据等,是典型的MVC中的Controller层。至于model层,则取决于项目的设计,很多时候是由开发者自己来搭建的。比方说用户登陆后使用单例来存储用户信息。在Cocoa的框架中,可以将Core Data、文件系统等看做对model层的支持。

2. 单例模式

在Cocoa框架中大量使用单例模式,如

[NSNotificationCenter defaultcenter][UIApplication sharedApplication][NSUserDefaults standardUserDefaults]

3. 观察者模式

观察者模式(有时又被称为发布/订阅模式)是软件设计模式的一种。在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实作事件处理系统。 维基百科

单例模式中的通知中心,就是典型的观察者模式

// 移除观察者[[NSNotificationCenter defaultCenter] removeObserver:self name:@"saveMessage" object:nil];// 添加观察者[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveMessage) name:@"saveMessage" object:nil];// 派发通知[[NSNotificationCenter defaultCenter] postNotificationName:@"postData" object:saveImageArray];

4. 责任链模式

在 面向对象程式设计里, 责任链模式是一种软件设计模式,它包含了一些命令对象和一系列的处理对象。每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。该模式还描述了往该处理链的末尾添加新的处理对象的方法。

Cocoa中对触摸事件的处理就是使用的责任链模式。UIView,UIApplication,UIViewController都直接或间接地继承自UIResponder类。事件的响应者链是一系列连接在一起的UIResponder对象,事件在响应者链中向上传递,直到找到处理它的响应者。

除了iOS,Android、Flash、html等前端技术对用户鼠标、手势事件的处理都是类似的处理方式。

5. 组合模式

有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。

这个和责任链模式差不多,也是各个前端技术的一个通用模式。将视图容器和视图对象当成同样的元素来处理,递归的管理整个视图树。

6. 模板方法

模板方法模式定义了一个算法的步骤,并允许次类别为一个或多个步骤提供其实践方式。让次类别在不改变算法架构的情况下,重新定义算法中的某些步骤。

init-初始化程序viewDidLoad-加载视图viewWillAppear-UIViewController对象的视图即将加入窗口时调用;viewDidApper-UIViewController对象的视图已经加入到窗口时调用;viewWillDisappear-UIViewController对象的视图即将消失、被覆盖或是隐藏时调用;viewDidDisappear-UIViewController对象的视图已经消失、被覆盖或是隐藏时调用;viewVillUnload-当内存过低时,需要释放一些不需要使用的视图时,即将释放时调用;viewDidUnload-当内存过低,释放一些不需要的视图时调用。

凡是有生命周期的对象,都适用这种模式。同样也是前端技术的一个通用模式。

7. 委托模式

在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。

在iOS中最典型的当然就是列表的处理了,UITableViewDelegate中的各种方法,实际上是UITableView委托的实现:

– tableView:willSelectRowAtIndexPath:– tableView:didSelectRowAtIndexPath:– tableView:willDeselectRowAtIndexPath:– tableView:didDeselectRowAtIndexPath:

8. 中介者模式

用一个中介者对象来封装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。

这个模式比较低调,其实是组合在MVC之中的。UIViewControler实际上是承担了各个视图对象的中介者的角色。

9. 工厂模式

这个模式与其说是Cocoa框架中的,不如说是NSFoundation框架中的。大量的objective-c对象都采用了这种模式。最常见的莫过于一些基础类型的静态方法了,比如NSString的stringWith系列

+ stringWithCharacters:length:+ stringWithString:+ stringWithCString:encoding:+ stringWithUTF8String:

结语

知道一个道理是一回事,能去实践一个道理是另外一回事。学习Cocoa框架设计模式的目的,除了帮助理解Cocoa框架之外,更多的是从更深层理解每个场景设计的原因和解决的问题,从而能在实际应用中举一反三。

相信还有很多地方对设计模式的应用没有发掘到,如果有补充,欢迎留言。

0 0
原创粉丝点击