设计模式基本原则大白话

单一职责原则

简单点说就是最小化封装,一个方法只负责一个功能,一个类只负责一类功能。如果一个功能比较复杂,那就差分成多个小功能,然后去实现。
这样做的好处是

  • 可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;
  • 提高类的可读性,提高系统的可维护性;
  • 变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。

里氏替换原则

简单点说就是子类可以扩展父类的功能,但不能改变父类原有的功能。
注意一下几点即可

  • 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
  • 子类中可以增加自己特有的方法。
  • 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
  • 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

这样做可以有效避免,功能耦合度太高,改一个小功能影响到其他功能的情况

依赖倒置原则

依赖倒置就是控制翻转,又名 IOC,简单点说,就是将需要的外部对象,通过构造函数参数传递或属性赋值的方式,让当前对象可以使用注入的外部对象。
注意一下几点即可

  • 低层模块尽量都要有抽象类或接口,或者两者都有。
  • 变量的声明类型尽量是抽象类或接口。
  • 使用继承时遵循里氏替换原则

这样做可以有效解耦,功能发生改变时,只需要替换外部的依赖对象,而不必修改主体功能代码。

接口隔离原则

简单点说就是将接口功能进行拆分,拆分成多个小一点的接口。在实现时只实现需要的功能即可。
注意一下几点即可

  • 接口要尽量小,但要保持一个最小化的完成功能,拆分过细,容易造成接口过多,设计太过复杂。先对功能进行思考后,适度的进行拆分。
  • 实现时只实现必要的接口
  • 提高完整性,避免过多的外部依赖

其实这根单一原则很相似,不过单一原则针对的是类和函数,接口隔离原则针对的是接口,对接口进行拆分可以有效避免不必要的代码实现,避免代码臃肿。

迪米特法则

简单点说就是降低耦合度,尽可能的实现解耦。这是很核心的原则,其实上面的四个原则很大程度上都为这个原则服务。不过上面的几个原则只针对代码层面。这个原则还有另一侧含义。
迪米特法则又叫最少知道原则,这么说就更容易理解了吧。代码方面要注意属性、方法的保密性和安全性,这也是为什么属性一般使用 private 的原因。

开闭原则

简单点说就是开放扩展,关闭修改。意思是设计时要有扩展性,遇到问题,尽量不修改已有功能,而是通过扩展新功能的方式去解决问题。

小节:单一职责原则告诉我们实现类要职责单一;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合。而开闭原则是总纲,他告诉我们要对扩展开放,对修改关闭。