23种设计模式-绪论

84 阅读3分钟

为什么要学习设计模式

  • 为了容易扩展
  • 为了容易阅读
  • 阅读其他框架的源码更容易

设计原则

  • SRP 单一职责原则
  • OCP 开闭原则
  • LSP 里式替换原则
  • ISP 接口隔离原则
  • DIP 依赖倒置原则
  • DRY 原则、KISS 原则、YAGNI 原则、LOD 法则

image.png

SRP 单一职责原则
  • 类的功能单一

一个类只负责完成一个职责或者功能。也就是说,不要设计大而全的类,要设计粒度小、功能单一的类。换个角度来讲就是,一个类包含了两个或者两个以上业务不相干的功能,那我们就说它职责不够单一,应该将它拆分成多个功能更加单一、粒度更细的类。

  • 函数功能单一

1个函数尽量描述一件事;函数命名、注释要完整;不要一个函数写几十行的代码,看不懂

OCP 开闭原则
  • 对扩展开放,对修改关闭

设计的时候,考虑变化点。写骨架,将不变的东西封装(经典案例:使用策略模式) 代码写的杂乱,单测也不容易写

LSP 里式替换原则

子类能代替父类,并且保证不影响原来的程序。

案例:接口添加登录的校验功能

子类重写父类的方法,如果传输账号、密码 则校验,不传输则不校验(符合里氏替换) 如果写成了账号、密码必传,则不符合里氏替换(因为子类影响了原来的功能,,其他模块使用该方法时,没有传账号密码会报错)

多态是面向对象编程的一大特性,也是面向对象编程语言的一种语法。它是一种代码实现的思路。而里式替换是一种设计原则,是用来指导继承关系中子类该如何设计的,子类的设计要保证在替换父类的时候,不改变原有程序的逻辑以及不破坏原有程序的正确性。

ISP 接口隔离原则

客户端不应该被强迫依赖它不需要的接口

DIP 依赖倒置原则

高层模块(high-level modules)不要依赖低层模块(low-level)。高层模块和低层模块应该通过抽象(abstractions)来互相依赖。除此之外,抽象(abstractions)不要依赖具体实现细节(details),具体实现细节(details)依赖抽象(abstractions)。

框架提供一个可扩展的代码骨架,用来组装对象、管理整个执行流程。程序员利用框架进行开发的时候,只需要往预留的扩展点上,添加跟自己业务相关的代码,就可以利用框架来驱动整个程序流程的执行。

如何提高代码复用性

  • 语义、入参、出参 一致的,应当只写1个函数,而不是改个方法名,再写一遍
  • 语义不同,仅仅是因为业务要求导致的出参、入参、逻辑一致,不能合并成1个方法,否则,后续业务变更,要拆分方法;而且不符合单一职责