单一职责原则(SRP)
每个类只包含一个职责,所有方法都应该为了实现该职责。
SRP分析:
someone + verb + itself 成立
开闭原则(OCP)
对扩展开放,对修改封闭,是面向对象设计的核心,提高了可重用性和可维护性。
Liskov替换原则(LSP)
使用多态对象的规范化:派生类中覆写的方法必须遵守与其他使用这个派生类的类之间的契约,即不能违反基类中这个方法的前置条件、后置条件和类不变式。里氏代换原则的目的是使程序中任何位置的基类都可被其派生出的子类替代。可以粗浅的理解为基类中有的属性和方法必须也要在派生类中出现。里氏代换原则是对OCP的补充
依赖倒置原则(DIP)
高层模块不应该依赖于低级别的模块,两者都应该依赖于抽象,抽象不应该依赖于细节,细节应当依赖于抽象。即把传统设计中由上到下的依赖关系反转成由下到上的依赖关系。是实现面向对象设计所声称的诸多优点的一个重要原则。
接口隔离原则
要求把大接口分解成小接口,用小接口来满足不同客户端的要求。客户端不应该被强迫要求依赖于它不需要的接口,对不需要的接口进行的修改不会影响到客户端的程序。
契约式设计
关系的参与者具有形式上的一致性和精确的定义。
前置条件:定义正确调用方法的限制,调用者的责任和被调用者的权益
后置条件:描述方法被调用后的状态,是调用者的益处和被调用者的责任
不变式:对类的断言,对类的所有操作都有效。
合成复用原则
在系统中应该尽量多使用组合和聚合关联关系,尽量少 使用甚至不使用继承关系。
Demeter法则
一个软件实体对其他实体的引用越少越好,或者说如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用,而是通过引入一个第三者发生间接交互。