单一职责原则
Single Responsibility Principle(SRP)
接口职责应该单一,不要承担过多的职责。
开放封闭原则
Open Closed Principle(OCP)
添加一个新的功能应该是,在已有代码基础上扩展代码(新增模块、类、方法等),而非修改已有代码(修改模块、类、方法等)
里式替换原则
Liskov Substitution Principle(LSP)
所有父类能出现的地方,子类就可以出现,并且替换了也不会出现任何错误。
例如Parent类出现的地方,可以替换成Son类,其中Son是Parent的子类。这就要求子类的所有相同方法,都必须遵循父类的约定,否则当父类替换为子类时就会出错。这里父类的约定,不仅仅指的是语法层面上的约定,还包括实现上的约定。
接口分离原则
Interface Segregation Principle(ISP)
接口的内容一定要尽可能地小,能有多小就多小。
我们对外提供API接口服务,调用方可能有很多个,很多时候我们会提供一个大而全的接口给不同的调用方,但有些时候调用方A只使用1、2、3 这三个方法,调用方B只使用4、5两个方法,其他都不用。接口隔离原则的意思是,你应该把 1、2、3 抽离出来作为一个接口,4、5 抽离出来作为一个接口,这样接口之间就隔离开来了。
依赖倒置原则
Dependency Inversion Principle(DIP)
就是说我们应该面向接口编程,通过抽象成接口,使各个类的实现彼此独立,实现类之间的松耦合。
定义:高层模块不应该依赖底层模块,两者都应该依赖其抽象。抽象不应该依赖细节,即接口或抽象类不依赖于实现类,细节应该依赖抽象,即实现类不应该依赖于接口或抽象类。
各个原则直接的关系
依赖倒置原则告诉我们要面向接口编程,当面向接口编程之后,接口隔离原则和单一职责原则又告诉我们要注意职责的划分,不要什么东西都混杂在一起,当我们职责划分清楚后,里氏替换原则告诉我们在使用继承时,要注意遵守父类的约定,而依赖倒置、接口隔离、单一职责、里氏替换的最终目标都是为了实现开闭原则。
总结
单一职责是所有设计原则的基础,开闭原则是设计的终极目标。
里氏替换原则强调的是子类替换父类后程序运行时的正确性,它用来帮助实现开闭原则。
而接口隔离原则用来帮助实现里氏替换原则,同时它也体现了单一职责。
依赖倒置原则是过程式编程与面向对象编程的分水岭,同时它也被用来指导接口隔离原则。