1、单一职责原则 Single Responsibility Principle
一个类,最好只做一件事,只有一个引起它的变化。
2、开闭原则 Open Close Principle
软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是,对于修改是封闭的。在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会将错误引入原本已经经过测试的旧代码中,破坏原有系统。
3、里氏替换原则 Liskov Substitution Principle
所有引用基类的地方必须能透明地使用其子类的对象。通俗点讲,只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是,反过来就不行了,有子类出现的地方,父类未必就能适应。说了那么多,其实最终总结就两个字:抽象。
里氏替换原则的核心原理是抽象,抽象又依赖于继承这个特性,在OOP当中,继承的优缺点都相当明显。 优点如下:
(1)代码重用,减少创建类的成本,每个子类都拥有父类的方法和属性; (2)子类与父类基本相似,但又与父类有所区别; (3)提高代码的可扩展性。 继承的缺点:
(1)继承是侵入性的,只要继承就必须拥有父类的所有属性和方法; (2)可能造成子类代码冗余、灵活性降低,因为子类必须拥有父类的属性和方法。
4、依赖倒置原则 Dependency Inversion Principle
面向接口编程,或者说是面向抽象编程,这里的抽象指的是接口或者抽象类。
5、接口隔离原则 Interface Segregation Principles
使用多个小的专门的接口,而不要使用一个大的总接口。就是每一个接口都执行一个专门的功能,用什么调什么。这样可以提高代码的灵活性,还可以降低类间的耦合性。提高稳定性。
Bob大叔(Robert C Martin)在21世纪早期将单一职责、开闭原则、里氏替换、接口隔离以及依赖倒置(也称为依赖反转)5个原则定义为SOLID原则,指代了面向对象编程的5个基本原则。当这些原则被一起应用时,它们使得一个软件系统更清晰、简单、最大程度地拥抱变化。SOLID被典型地应用在测试驱动开发上,并且是敏捷开发以及自适应软件开发基本原则的重要组成部分。在经过第1.1~1.5节的学习之后,我们发现这几大原则最终就可以化为这几个关键词:抽象、单一职责、最小化。
6、迪米特原则 Law of Demeter
一个对象应该对其他对象有最少的了解。通俗地讲,一个类应该对自己需要耦合或调用的类知道得最少,类的内部如何实现、如何复杂都与调用者或者依赖者没关系,调用者或者依赖者只需要知道他需要的方法即可,其他的我一概不关心。类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。