设计模式
- 责任链 (事件响应机制)
一个类持有一个当前类类型的成员变量(像链表)。
- 桥接模式
通过抽象父类来实现,子类实现功能,在实用类里决定具体用哪个子类。
- 适配器模式
类适配器
对象适配器
适配对象以成员变量的方式集成被适配对象。
- 单例模式
oc单例:
@implementation Danli
+(id)sharedInstance{
static Danli *instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken,^{
instance = [supper allocWithZone:NULL]init];
})
return instance;
}
+(id)allocWithZone:(struct _NSZone *)zone{
return [self shareInstance];
}
-(id)copyWithZone:(nullable NSZone *)zone{
return self;
}
swift单例:
class Danli{
// “懒实例化”的全局变量会被自动放在dispatch_once块中
static let shared = Danli();
}
- 命令模式
对行为进行参数化的设计模式。例如微博在很多页面都有转发评论赞等相关行为逻辑,这就需要对这些行为逻辑进行封装。
可以降低代码重合度
六大设计原则
- 单一指责原则
一个类只负责一件事 例:UIView和CALayer
- 依赖倒置原则
抽象不应该依赖于具体实现,具体实现可以依赖抽象。
- 开闭原则
对修改关闭,对扩展开放
- 里氏替换原则
父类可以被子类无缝替换,且原有功能不受任何影响。kvo就是典型的子类默默替换了父类
- 接口隔离原则
使用多个专门的协议、而不是一个庞大的协议 例:UITableviewDelegate UITableviewDatasourse
- 迪米特法则
一个对象应当对其他对象有尽量少的了解。
高内聚、低耦合
创建型模式
1、简单工厂模式
2、工厂模式
3、抽象工厂模式
4、建造者模式
5、单例模式
结构模式
6、适配器模式
7、桥接模式
8、装饰器模式(iOS 类别)
9、外观模式
10、享元模式(iOS tableviewcell复用机制)
11、代理模式
行为模式
12、命令模式
13 、中介者模式
14、观察者模式
15、状态模式
对外暴露只是改变状态,类似于重写set方法
16、策略模式
本质:分离算法,选择实现
把参数和实现 同时传递给函数
var add = function(a,b){
return a+b;
}
func(1,2,add);