设计模式-八大设计原则(一)

「你所用的面向对象,空有招式,但无内涵」

只学招式,不学心法,武功瓶颈难以突破,更有甚者潜心修炼,数十年如一日,却不及他人一个月,走火入魔,此举实在是得不偿失。
你是否想如同杨过那样,年纪轻轻就已经成为武林大侠,即使郭靖一样的资质,也可以在短期内,上能九天揽月,下能五洋抓鳖。是的,你妹看错!
image.png

image.png

设计模式

只要你学过java、python或者是cpp等任意一门面向对象语言,23种设计模式代码部分都能看懂。代码部分都能理解,直接开始上手干它,不就完了吗?非也非也,小伙子,这些代码只是辅助理解23种设计模式是如何解决日常编程问题的,其中真经要诀不可得也。
所以嘞,在学习设计模式时,我们要关注『 如何使用设计模式八大原则分析问题,解决问题』,而不是用什么设计模式。

如能理解八大原则,坚持数日,大事可成矣。

依赖倒置原则(DIP)

  1. 高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象
  2. 抽象不应该依赖于实现细节(变化),实现细节应该依赖于抽象(稳定)

开放封闭原则(OCP)

  1. 对扩展开放,对更改封闭
  2. 类模块应该是可扩展的,但是不可修改的

单一职责原则(SRP)

  1. 一个类应该仅有一个引起他变化的原因
  2. 变化的方向隐含着类的职责

Liskov替换原则(LSP)

  1. 子类必须能够替换它们的基类(IS-A)
  2. 继承表达类型抽象

接口隔离原则(ISP)

  1. 不应该强迫客户程序依赖它们不用的方法
  2. 接口应该小而完备

优先使用对象组合,而不是类继承

  1. 类继承通常为“白箱复用”,对象组合通常为“黑箱复用”
  2. 继承在某种程度上继承了很多基类的函数,破坏了封装性,子类父类的耦合度过高
  3. 用对象组合只要求被组合的对象具有良好的接口定义即可

封装变化点

  1. 使用封装来创建对象之间的分界点,让设计者可以在分界点的一侧进行修改,而不会对另一侧产生不良影响,实现对象之间的松耦合。

针对接口编程,不要针对实现编程

  1. 不将变量类型声明为某个特定的具体类,而声明为某个接口类
  2. 客户程序无需知晓对象的具体类型,只需要知道对象所具有的接口即可
  3. 减少系统中各部分的依赖关系,从而实现“高内聚、低耦合”的类设计方案

在以后的分析中,比如代码,要先看违背了哪些原则,再去看哪些变化、哪些稳定,之后利用23种方法,问题便迎刃而解。