开闭原则(Open-Closed Principle, OCP)
对扩展开放, 对修改关闭. 强调用抽象构建框架, 用实现扩展细节.
单一职责原则(Simple Responsebility Principle, SRP)
一个类、接口、方法只做一件事.
假设我们有一个 Class 负责两个职责,一旦发生需求变更,修改其中一个职责的逻辑代码,有可能会导致另一个职责的功能发生故障.
最好的方式给两个职责分别用两个 Class 来实现, 降低类的复杂度,提高类的 可读性,提高系统的可维护性,降低变更引起的风险.依赖倒置原则(Dependence Inversion Principle, DIP)
设计代码结构时, 高层模块不应该依赖于底层模块, 二者都应该依赖其抽象.
以抽象为基准比以细节为基准搭建起来的架构要稳定得多.通过抽象使得各个类或者模块不相互影响, 实现松耦合
接口隔离原则(Interface Segreation Principle, ISP)
用多个专门的接口,而不使 用单一的总接口,客户端不应该依赖它不需要的接口.
迪米特法则(Law of Demeter, LOD), 又叫最少知道原则(Least Knowledge Principle,LKP)
不要和陌生人说话!
一个对象应该对其他对象保持最少的了解, 尽量降低类与类之间的耦合.里氏替换原则(Liskov Substitution Principle,LSP)
子类可以扩展父类的功能但不能改变父类原有的功能:
* 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法. * 子类中可以增加自己特有的方法. * 当子类的方法重载父类的方法时,方法的前置条件(即方法的输入/入参)要比父类 方法的输入参数更宽松. * 当子类的方法实现父类的方法时(重写/重载或实现抽象方法),方法的后置条件(即 方法的输出/返回值)要比父类更严格或相等合成复用原则(Composite/Aggregate Reuse Principle,CARP)
尽量使用对象组合(has-a)、聚合(contains-a),而不使用继承关系达到代码复用的目的