单一职责原则:一个类,仅有一个引起他变化的原因。如果一个类承担的责任太多,等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。
白话: 软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离,如何判断是否分离:如果你能够想到多于一个的动机去改变一个类,那么这个类就具有一个的职责。目的:降低耦合性。
开发-封闭原则:软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。
白话: 面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。目的:扩展性好。
开发人员应该仅对程序中呈现出频繁变化的那些部分做出抽象,然而对于应用程序中的每个部分都刻意的进行抽象同样不是一个好主意。拒绝不成熟的抽象和抽象一样重要。
依赖倒转原则:①抽象应该不依赖细节,细节却要依赖于抽象。②高层模块不应该依赖于底层模块,两个都应该依赖于抽象。
白话: 针对于接口编程,而不是实现。目的:降低耦合性,复用性高。
里氏代换原则:子类型必须能够替换掉他们的父类型。
白话:对父类的使用同样适用于子类。把父类替换成子类,程序行为不会发生变化。面向对象的基础原理。
只有当子类可以替换父类,软件单位功能不受影响,父类才能真正被复用,子类才能在父类基础上增加新的行为。正是子类型的可替换性才使得父类类型的模块在无需修改的情况下可以扩展。