单一职责原则 (Single Responsibility Principle,SRP)
一个类只负责一个功能领域的相应职责, 或者可以定义为:就一个类而言,应该只有一个引起他变化的原因。
开闭原则 (Open-Closed Principle,OCP)
一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
里式替换原则(Liskov Substitution Principle, LSP)
所有引用基类(父类)的地方必须能透明的使用其子类的对象。
依赖倒置原则(Dependency Inversion Principle, DIP)
抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。
接口隔离原则(Interface Segregation Principle, ISP)
使用多个专门的接口,而不是单一的总接口。即客户端不应该以来那些他不需要的接口。
根据接口隔离原则,当一个接口太大时,我们需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。每一个接口应该承担一种相对独立的角色,不敢不该干的事,该干的事情都要干。这里的接口往往有两种不同的含义:一种是指一个类型所具有的的方法特征的集合。仅仅是一种逻辑上的抽象;另外一种是指某种语言具体的接口定义。有严格的定义和接口,比如Java语言中的interface,对于这两种不同的含义,ISP的表达方法以及含义都有所不同。
迪米特法则(Law of Demeter, LoD)(最少知识法则)
一个软件实体应当尽可能少的与其他实体发生相互作用。
如果一个系统负荷迪米特法则,那么当其中某一个模块发生修改时,就会尽量少的影响其他模块,扩展会相对容易,这是对软件实体之间通信的限制,迪米特法则要求限制软件实体之间通信的宽度和深度。迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系。