单一职责原则 {#单一职责原则}
一个类只负责一项职责,如若不然,就应该把类拆分;
比如相机, 只有拍照的功能
里氏替换原则 {#里氏替换原则}
克服继承的缺点
-
里氏替换原则中,子类可以扩展父类的功能,但不要改变父类原有的功能,对父类的方法尽量不要重写和重载。因为父类代表了定义好的结构,通过这个规范的接口与外界交互,子类不应该随便破坏它。
-
如果对每一个类型为 S 的对象 o1,都有类型为 T 的对象 o2,使得以 T 定义的所有程序 P 在所有的对象 o1 都代替成 o2 时,程序 P 的行为没有发生变化,那么类型 S 是类型 T 的子类型。
-
只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是,反过来就不行了,有子类出现的地方,父类未必就能适应。
依赖倒转原则 {#依赖倒转原则}
Dependence Inversion Principle
这个是开闭原则的基础,具体内容:面向接口编程。
-
模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的
-
接口或抽象类不依赖于实现类
-
实现类依赖于接口或抽象类
接口隔离原则 {#接口隔离原则}
Interface Segregation Principle
这个原则的意思是:每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。
迪米特法则 {#迪米特法则}
Law of Demeter
这个原则的意思是:每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。
开闭原则 {#开闭原则}
Open Close Principle
开闭原则是一个非常基础的原则,其他的五个原则都是开闭原则的具体,也就是说其他的五个原则是指导设计的工具和方法,而开闭原则才是它们的精神领袖。只要我们遵守好其他的五大原则,那么我们设计的软件自然就遵守了开闭原则。
简单总结上面的五大原则就是:单一职责原则告诉我们实现类要职责单一;里式替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向抽象编程;接口隔离原则告诉我们设计接口要精简单一;迪米特法则告诉我们要降低耦合。而开闭原则告诉我们:要对修改关闭,对扩展开放。其实前面的五大原则一直反复强调的,几乎每一个原则都在强调的宗旨就是:解耦,单一,高内聚。
开闭原则解读:
-
通过接口或抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的 public 方法
-
参数类型、引用对象尽量使用接口或者抽象类,而不是实现类
-
抽象层尽量保持稳定,一旦确定即不允许修改
设计模式是解决问题的思想,重要的是思想,而不是刻意在写代码时去追求设计模式