开闭原则
定义:软件实体对于拓展应该是开放的,但是对于修改应该是封闭的。
问题描述:软件在开发的过程中,会存在功能的拓展,在进行功能拓展的过程中,遵守开闭原则尽量减少原有代码的修改,而是进行新的代码的拓展。在JAVA语言定义中,开闭原则的实现即为抽象类,在进行功能的具体添加时,只需要对抽象方法进行实现即可。
单一职责
定义:对于一个类而言,应该仅仅只有一个引起它变化的原因。
问题描述:一个类C只负责一个职责P,如果由于项目功能拓展的原因,需要在类C中增加一个职责P2,尽量在可行的情况下将类C进行拆分,分别负责职责P和职责P2。同样的,对于方法而言,在某些情况下我们更要遵从单一职责,比如一个接口 boolean save(…) 修改账户、密码、年龄等个人信息,加入现在要拓展一个功能,只修改密码,当前的全量修改接口是否有些不妥,但是创建一个新的接口又存在代码重复,因此,起初定义 boolean save_passwd(…)、boolean save_account()等单一功能接口,后面在功能增加的过程中进行复合调用即可,避免代码的重复编写和高效维护。
里氏替换原则
定义:所有引用基类(父类)的地方必须能透明地使用其子类的对象。它是继承的基石。
里氏替换原则包含以下4层含义:
- 子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法。
- 子类中可以增加自己特有的方法。
- 当子类覆盖或实现父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
- 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。