iOS常用的几种设计模式
iOS开发过程中,有时候经常弄不清楚常用的几种开发模式,现有时间进行一下简单的总结和探讨:
下面先说一下设计模式都有哪几种:
1、单利模式
2、代理模式
3、工厂模式
4、观察者模式
一、单例模式
单例设计模式确保对于一个给定的类全局只创建一次。它通常采用懒加载的方式在第一次用到实例的时候再去创建它。
应用场景:确保程序运行期某个类,只有一份实例,用于进行资源共享控制。
优点:无论调用多少次有且仅有一个对象,类似全局变量,在整个工程中都可以使用。
二、代理模式
应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。
优点:1、如果delegate中的一个方法没有实现那么就会出现编译警告/错误
2、协议必须在controller的作用域范围内定义
3、在一个控制器中可以定义定义多个不同的协议,每个协议有不同的delegates
三、工厂模式
工厂模式:我们可能会在不同的地方去创建这个对象,那么我们可能需要写100句alloc 了,但是如果我们在创建对象的时候,需要在这些对象创建完之后,为它的一个属性添加一个固定的值,比方说都是某某学校的学生,那么可能有需要多些100行重复的代码了,那么,如果写一个-(void)createObj方法,把创建对象和学校属性写在这个方法里边,那么就是会省事很多,也就是说我们可以alloc 创建对象封装到一个方法里边,直接调用这个方法就可以了,这就是简单工厂方法
应用场景:客户端只知道传入工厂类的参数,对于如何创建对象的逻辑不必关心时。
优势:客户端可以直接消费产品,而不必关心具体产品的实现(消除了客户端直接创建产品对象的责任,实现了对责任的分割)。
不足:1、其集中了所有产品的创建逻辑,一旦不能正常工作,整个系统都会受到影响,而且当产品类别多结构复杂的时候,把所有创建工作放进一个工厂来,会使后期程序的扩展较为困难。
2、要创建的类必须拥有同一个父类
3、要创建的类在100个不同的地方所调用的方法必须一样
注意:项目初期,软件结构和需求都没有稳定下来时,不建议使用此模式,因为其劣势也很明显,增 加了代码的复杂度,增加了调用层次,增加了内存负担。所以要注意防止模式的滥用。
四、观察者模式 —— KVO
观察者模式:利用键值观察可以注册成为一个对象的观察者。这是一个对象与另外一个对象保持同步的一种方法,即当另外一种对象的状态发生改变时,观察对象马上作出反应。它只能用来对属性作出反应,而不会用来对方法或者动作作出反应。