下面是 iOS的几种开发模式介绍:
1. 代理模式-- delegate
可应用于当某个类的功能需要另一个类来实现时,但是又不确定具体由哪个类来实现。
优势:解耦合
实例1: UICollectionView
的数据源代理,和 @protocol
配合使用,实现 delegate
功能。
实例2: 自定义的 delegate
传值使用。
2. 观察者模式
应用场景: 一般是 model层,在 control和view间进行的交互方式。
实例: NSNotificationCenter
注册监听和发送通知的数据传递方式
// 注册通知监听
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(testMethod) name:@"testNSNotificationCenter" object:nil ];
// 发送 `NSNotificationCenter`
[[NSNotificationCenter defaultCenter]postNotificationName:@"testNSNotificationCenter" object:nil ];
// 移除指定 `NSNotificationCenter` 通知
[[NSNotificationCenter defaultCenter]removeObserver:self name:@"testNSNotificationCenter" object:nil ];
// 移除 所有监听通知
[[NSNotificationCenter defaultCenter]removeObserver:self ];
实例: KVO/KVC
的使用
3. 策略模式
应用场景: 定义算法族,封装起来,使他们之间可以相互替换。(在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者 策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能 。如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法;当然也可以将这些查找算法封装在一个统一的方法中,通过if…else…或者 case 等条件判断语句来进行选择。这两种实现方法我们都可以称之为硬编码,如果需要增加一种新的查找算法,需要修改封装算法类的源代码;更换查找算法,也需要修改客户端调用代码。在这个算法类中封装了大量查找算法, 该类代码将较复杂,维护较为困难。如果我们将这些策略包含在客户端 ,这种做法更不可取,将导致客户端程序庞大而且难以维护,如果存在大量可供选择的算法时问题将变得更加严重。)
优势:使算法的变化独立于使用算法的用户。
实例:排序算法,NSArray的sortedArrayUsingSelector。
注意事项:
- 1,剥离类中易于变化的行为,通过组合的方式嵌入抽象基类
- 2,变化的行为抽象基类为,所有可变变化的父类
- 3,用户类的最终实例,通过注入行为实例的方式,设定易变行为
防止了继承行为方式,导致无关行为污染子类。完成了策略封装和可替换性。
4. 工厂模式
应用场景:工厂方式创建类的实例
优势:易于替换,面向抽象编程,application只与抽象工厂和易变类的共性抽象类发生调用关系。
实例:项目部署环境中依赖多个不同类型的数据库时,需要使用工厂配合proxy完成易用性的替换。
注意事项:项目初期,软件结构和需求都没有稳定下来时,不建议使用此模式,因为其劣势也很明显,增加了代码的复杂度,增加了调用层次,增加了内存负担。所以要注意防止模式的滥用。
** MVC模式 **
下面章节详解
** 单例模式 **
下面章节详解
网友评论