谈谈设计模式

2019-03-28  本文已影响0人  TAsama

六大设计原则

  1. 单一职责原则
  2. 依赖倒置原则
  3. 开闭原则
  4. 接口隔离原则
  5. 里氏替换原则
  6. 迪米特法则
单一职责原则

一个类只做一件事

依赖倒置原则

抽象接口不依赖于具体实现, 而具体实现可以依赖于抽象接口
比如数据存储的封装, 抽象接口可以提供增删改查的方法, 而其实现应该是黑盒的, 与接口无关的.

开闭原则

对修改关闭, 对扩展开放

接口隔离原则

提供多个类型的协议, 避免一个臃肿的协议

里氏替换原则

父类可以被子类无风替换, 原有功能不受影响

迪米特法则

一个对象对其他对象尽可能少的了解(低耦合,高内聚)

责任链

责任链模式可以解决任务的依赖关系问题.


责任链的类构成

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

桥接

桥接模式的类构成

使用者持有抽象的基类ClassA, ClassA持有抽象的基类B, 调用时, 根据需要将A1/A2/A3赋值给调用者原先持有的属性, 在将B1/B2/B3根据需求赋值给ClassA, 这样我们可以自由组合调用者和其内部的实际调用, 而作为桥梁的ClassA与ClassB本身不关心他们的实际调用.

适配器

一个现有类需要适应变化

当我们有个一个年代久远的基类, 我们不便对其添加对象和方法时, 我们就可以为其添加适配器, 使一个类持有该基类, 在调用这个基类的前后我们可以插入自己的代码, 来适配新的需求. 这也就是做了一次简单的封装.

单例模式

  1. 在单例方法中创建实例使用
[[super allocWithZone:Null] init];
  1. 重写自身的allocWithZone方法在其内部调用单例方法保证创建永远是一个单例
  2. 遵守Copy协议, 重写copyWithZone方法, 返回self, 令其不能被copy

命令模式

我们可以将一些事件拆分开来, 事件的执行及其回调上下文等封装成commend对象, 调用commend的管理者封装为Manager单例对象, 以此来减少代码的分散, 调用时被转换成, 生成命令, 中央管理器执行命令的命令模式. 这和NSUrlSession使用的task模式类似, 创建task, 执行task的感觉

总结

  1. 手写单例实现
    重写allcoWithZone/copyWithZone方法, 使用[super allocWithZone:]创建单例
  2. 了解6大设计原则
  3. 桥接模式的主体结构
  4. UI事件的传递机制, 即责任链模式
上一篇 下一篇

猜你喜欢

热点阅读