在软件开发中一般认为有23种设计模式(design pattern),这是软件开发中的较高的境界了。在iOS开发中最常用的有哪些设计模式呢?我们今天来分析一下:

一.【代理模式】

使用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。其实就像是Java中的接口,类可以实现或者不实现协议(接口)中的方法。

优点:低耦合。

使用原则:开闭原则。

实例:TableView的UITableViewDataSource、UITableViewDelegate,通过和protocol的配合,完成代理。


二.【观察者模式】

使用场景:一般是对model层进行观察,Controller和View进行通知的方式,只负责发送消息,不关系谁去接收。一个对象状态改变,通知正在对他进行观察的对象,这些对象根据各自的要求做出响应。

优点:低耦合。

使用原则:接口隔离原则,开闭原则。

实例:KVO键值观察者。通知机制。


三.【MVC模式】

使用场景:整个iOS App系统架构就应该按照MVC模式。

优点:层次清晰、易于维护。

实例:model进行数据的存储,View进行视图的显示和响应,controller是model和view之间的桥梁,进行逻辑控制。


四.【单例模式】

使用场景:确保程序运行时只有一个实例,用于进行资源共享控制。

优点:逻辑简单。

原则:单一职责。

实例:

(1)UIAccelerometer类和sharedAccelerometer方法,一般如果方法名中有shared这样的词,就可以认为这是一个可以整个应用程序共享的实例变量,一般是使用了单例。

(2)UIApplication类和sharedApplication方法,我们一般使用该方法来创建全局变量。

(3)NSBundle类和mainBundle方法。

(4)NSFileManager类和defaultManager方法。

(5)NSNotificationCenter类和defaultManager方法。其中NSNotificationCenter也实现了观察者模式。

(6)NSUserDefaults类和defaultUser方法。


五.【策略模式】

使用场景:定义算法族,进行封装,使他们之间可以相互替换。

优点:使算法的变化独立于使用算法的用户。

原则:针对接口编程,而不是针对实现编程。

实例:排序算法,NSArray的sortedArrayUsingSelector


六.【工厂模式】

使用场景:工厂方法创建类的实例,多于proxy模式配合,创建可替换代理类。

优点:易于替换,面向抽象编程,application只和抽象工厂的共性抽象类发生调用关系。

原则:依赖倒置原则。

实例:项目部署环境中依赖多个不同类型的数据库时,需要使用工厂配合proxy完成易用性替换。


     总结,在实际的开发中,上述的模式用的最常见,如果以后用到其他的,我会继续和大家分享。



github主页:https://github.com/chenyufeng1991  。欢迎大家访问!