六大设计原则
- 单一职责原则
- 依赖倒置原则
- 开闭原则
- 接口隔离原则
- 里氏替换原则
- 迪米特法则
单一职责原则
一个类只做一件事
依赖倒置原则
抽象接口不依赖于具体实现, 而具体实现可以依赖于抽象接口
比如数据存储的封装, 抽象接口可以提供增删改查的方法, 而其实现应该是黑盒的, 与接口无关的.
开闭原则
对修改关闭, 对扩展开放
接口隔离原则
提供多个类型的协议, 避免一个臃肿的协议
里氏替换原则
父类可以被子类无风替换, 原有功能不受影响
迪米特法则
一个对象对其他对象尽可能少的了解(低耦合,高内聚)
责任链
责任链模式可以解决任务的依赖关系问题.

举例:
一个对象中有一个属性叫nextResponder, 该属性与当前对象属于同一个类, 当当前对象不能执行某个方法时, 就调用他的nextResponder来执行同样的方法, 将任务传递下去.
使用这种方式时, 当任务的依赖顺序发生改变时, 只需要调整其nextResponder的指向即可调整他的响应链顺序.
我们还可以根据后端给出的响应来动态调整响应链顺序, 系统中使用责任链的设计模式处理了UI事件的传递机制
桥接

使用者持有抽象的基类ClassA, ClassA持有抽象的基类B, 调用时, 根据需要将A1/A2/A3赋值给调用者原先持有的属性, 在将B1/B2/B3根据需求赋值给ClassA, 这样我们可以自由组合调用者和其内部的实际调用, 而作为桥梁的ClassA与ClassB本身不关心他们的实际调用.
适配器
一个现有类需要适应变化
- 对象适配器
- 类适配器
当我们有个一个年代久远的基类, 我们不便对其添加对象和方法时, 我们就可以为其添加适配器, 使一个类持有该基类, 在调用这个基类的前后我们可以插入自己的代码, 来适配新的需求. 这也就是做了一次简单的封装.
单例模式
- 在单例方法中创建实例使用
[[super allocWithZone:Null] init];
- 重写自身的allocWithZone方法在其内部调用单例方法保证创建永远是一个单例
- 遵守Copy协议, 重写copyWithZone方法, 返回self, 令其不能被copy
命令模式
我们可以将一些事件拆分开来, 事件的执行及其回调上下文等封装成commend对象, 调用commend的管理者封装为Manager单例对象, 以此来减少代码的分散, 调用时被转换成, 生成命令, 中央管理器执行命令的命令模式. 这和NSUrlSession使用的task模式类似, 创建task, 执行task的感觉
总结
- 手写单例实现
重写allcoWithZone/copyWithZone方法, 使用[super allocWithZone:]创建单例 - 了解6大设计原则
- 桥接模式的主体结构
- UI事件的传递机制, 即责任链模式
网友评论