1. 委托代理模式
定义: 委托他人帮自己做某些事情.
应用时机: 当一个类的某些功能需要其他类实现但又不知道具体是哪个类时
好处: 解耦合
实例: UITableView的内置代理[cocoa中的代理模式,委托人: 框架中的对象(视图中的控件、表视图神马的), 代理人: 视图控制器对象];
自定义的delegate
注意: 代理需要签署代理协议
自定义代理:
@protocol AbcDelegate : NSObject
//方法
@end
//声明属性
@property (nonatomic, assign) id
2. MVC模式
应用时机: 项目开发经常用到的设计模式,利用数据模型,控制器,视图将应用程序进行逻辑划分
好处: 使项目逻辑结构更加清晰,层次分明,易于维护与开发
实例: model--数据模型, controller--控制器, view--视图展示
3. 观察者模式
应用时机: controller与view需要进行通信,不需要关心接收者,只负责发送通知
好处: 解耦合
实例: KVO--键值观察,通过监听对象属性值的变化进行相应操作;
UINotification--通知, 通过注册通知中心,在任何地方都可以发布消息, 程序运行时注册观察者的对象可以接收消息
4.单例模式
定义: 某个类在程序中有且只有一个实例对象,而且自行实例化并向整个程序提供这个实例.
应用时机: 程序全局都需要用到某个类,而且要保证全局使用的数据是一样的
好处:节约内存开销,能保证全局使用的数据相同, 一般工具类设置成单例;
实例: [UIApplication sharedApplication]
注意: 不加同步的懒汉式线程(每次获取实例都会判断,看是否需要创建实例)是不安全的,可能导致并发问题.
写一个简单的单例:
static Share *obj = nil;
+ (id) shareInstance{
@synchronized (self) {
if (obj == nil){
obj =[ [Share alloc] init ];
}
}
return obj;
}
多线程实现单例:
+ (id) shareInstance{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
obj = [[Share alloc] init ];
});
return obj;
}
以下2种设计模式我基本没有用过,在网站查找了一些资料和blog,汇总一下
5. 简单工厂模式
定义:在基类中定义创建对象的接口,让子类决定实例化那个类; 工厂方法让一个类的实例化延迟到子类中进行
(专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类)
应用时机: 一个类不知道它所创建的对象的类时; 一个类希望由它的子类决定所创建的对象时
且类工厂负责创建的对象较少, 客户端只知道传入工厂类的参数,对于如创建对象的逻辑不必关心时;
好处: 客户端可以直接消费产品,而不比关心具体产品的实现,消除了客户端直接创建产品对象的责任,实现了对责任的分割;
不足:工厂类集中了所有产品的创建逻辑,一旦不能工作,整个程序都会收到影响, 且当产品类多结构复杂时,不利于后期程序的扩展.
注意: 1.要创建的类必须有同一个父类;
2. 要创建的类在不同的地方调用的方法必须一致.
6.策略模式
定义: 定 义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化.
应用时机: 将算法封装起来, 使他们可以相互转换.
好处: 算法和对象分开来, 使得算法可以独立于他的用户而变化.
不足: 客户必须知道所有的策略类才能决定选择哪一个,有时不得不向客服暴露所有的实现问题; 将会产生很多策略类.
有些我也总结的不是很深刻, 希望大家多提意见,一起学习