单一职责原则
用来控制类粒度的大小
是实现高内聚、低耦合的指导方针
开闭原则:一个软件实体应该对扩展开放,对修改关闭。
为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。
在Java等实现中,可以为系统定义一个相对稳定的抽象层,具体实现移交到实现层。
系统的可扩展性和灵活性
里氏代换原则:所有引用基类的地方必须能透明地使用其子类对象。
里氏代换原则是实现开闭的重要方式之一,由于使用基类对象的地方都可以使用子类,所以在程序中尽量使用基类来对对象进行定义,而在运行时再确定其子类类型,用子类对象替换父类对象。
应将父类设计成抽象类或接口,让子类继承或实现父类,运行时子类替换父类,可以很方便地扩展系统,无须修改原来子类代码,只需增加一个子类即可。
依赖倒转原则:抽象不应该依赖于细节,细节应该依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。
开闭是面向对象设计的主要目标,依赖倒转就是面向对象设计的主要实现机制之一,它是系统抽象化的具体实现。
依赖倒转原则要求在程序代码中传递参数或关联关系中,尽量引用高层次的抽象类型,即使用接口或抽象类进行参数类型声明、变量类型声明、方法返回类型声明以及数据类型的转换,而不是具体类。为了确保该原则,子类只实现抽象类或是接口中声明的方法,否则不能调用子类自己的方法。
在实现依赖倒转原则时,需要针对抽象层编程,而将具体的对象通过依赖注入的方式注入到其他对象中。
在大多数情况下,上述3种原则会同时出现,开闭原则是目标,里氏代换原则是基础,依赖倒转原则是手段
借口隔离原则:使用多个专用的接口,而不使用单一的总接口。
- 当把接口理解成一个类型所提供的所有方法特征的集合时,这就是一种逻辑上的概念,接口的划分直接带来类型的划分。可以把接口理解成角色,每个接口代表一个角色,->角色隔离
- 把接口理解成狭义的interface,那么ISP表示该interface仅提供客户端所需要的行为。
合成复用原则:尽量使用对象组合,而不是使用继承来达到复用的目的。
迪米特法则(最少知识原则):一个软件实体应当尽可能少与其它实体发生交互作用。