在软件开发中一般认为有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 。欢迎大家访问!