SRP: Single Responsibility Principle 单一职责原则
系统中的每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成。
每一个职责都是一个设计的变因,需求变化的时候,需求变化反映为类职责的变化。如果一个类承担的职责过多,就等于把这些职责耦合在了一起。一个职责的变化就可能削弱或者抑制这个类其它职责的能力。这种设计会导致脆弱的设计。当变化发生的时候,设计会遭到意想不到的破坏。
OCP: Open Close Principle 开闭原则
类应该对修改关闭,对扩展打开。
OCP 关注的是灵活性,改动是通过增加代码进行的,而不是改动现有的代码。OCP背后的机制就是抽象和多态,通过创建抽象来隔离以后发生的同类变化。
LSP: The Liskov substitution principle 里氏替换原则
子类必须能够替换基类。
继承必须确保基类所拥有的性质在派生类中仍然成立。也就是说,当一个派生类类的实例应该能够替换任何其基类的实例时,它们之间才具有is-A关系。
DIP:Dependence Inversion Principle 反向依赖原则
高层模块不应该依赖于底层模块,二者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。
如果一个类很稳定,那么依赖于它不会造成伤害。然而我们自己的具体类大多是不稳定的,通过把他们隐藏在抽象接口后面可以隔离不稳定性。
要针对接口编程,不针对实现编程,这样实现细节改变之后,用户针对抽象接口的调用不需要改变。
ISP:Interface Segregation Principle 接口分隔原则
尽量提供有针对性符合功能特点的简单接口,而不是包含很多方法的总接口。
一个接口中包含太多行为时候,导致它们的客户程序之间产生不正常的依赖关系,我们要做的就是分离接口,实现解耦。应用了ISP之后,客户程序看到的是多个内聚的接口。
接口分离后,其中一个接口发生改变时,没有调用该接口的用户代码不需要改变。