单一原则:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。
开闭原则:一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
1、为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。为系统定义一个相对稳定的抽象层,而将不用的实现行为移到具体的实现层中完成。
里氏代换原则:所有引用基类的地方都必须能透明地使用其子类的对象。
1、在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常。
2、里氏代换是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确认其子类类型,用子类对象来替换父类对象。
3、子类的所有方法必须在父类中声明,或子类必须实现父类中声明的所有方法。为了保证系统的扩展性,在程序中通常使用父类来进行定义,如果一个方法只存在子类中,在父类中不提供相应的声明,则无法再以父类定义的对象中使用该方法。
4、进行设计父类为抽象类或者接口,让子类继承父类或实现父类接口,并实现在父类中声明的方法,运行时,子类实例替换父类实例,我们很方便地扩展系统的功能,同时无需修改原有子类的代码。增加新的功能可以通过增加一个新的子类来实现。
依赖倒置原则:抽象不应该依赖于细节,细节应当依赖于抽象。针对接口编程,而不是针对实现编程。
1、程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等,而不应该用具体类来做这些事情。
2、我们需要针对抽象层编程,而将具体类的对象通过依赖注入的方式注入到其他对象中,依赖注入是指当一个对象要与其他对象发生依赖关系时,通过抽象来注入所依赖的对象。
接口隔离原则:使用多个专门的接口,而不是使用单一的总接口,即客户端不应该依赖哪些它不需要的接口。
1、可以把接口理解成角色,一个接口只能代表一个角色,每个角色都有它特定的一个接口。
合成复用原则:进行使用对象组合,而不是继承来达到复用的目的。
1、在一个新的对象里通过关联关系来使用一些已有的对象,使之成为新对象的一部分。
迪米特原则:一个软件实体应当尽可能少地与其他实体发生相互作用。
1、类与类之间保持松散的耦合关系。
2、尽量减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生直接的相互作用。通过引入中间类,将两个类进行关联。