当前位置: 首页 > 后端技术 > Java

设计模式简单来说-里氏代换原则

时间:2023-04-01 21:22:04 Java

1.里氏代换原则介绍2.里氏代换原则用代码演示3.总结1.里氏代换原则介绍定义:1)如果每个类型都是T1对象o1有对象o2类型为T2,这样当T1定义的所有程序P中的所有对象o1都被o2替换时,程序P的行为没有改变,则类型T2是类型T1的子类型。2)所有对基类的引用必须能够透明地使用其子类的对象。看到这里,我们可能不理解。总之,在使用继承的时候,比如B类继承A类,除了增加新方法完成新功能P2外,尽量不要重写父类A的方法,也不要重载父类的方法classA.问题描述:ORM框架相信大家都用过,比如mybatis,jpa等,这里以jpa为例,假设jpa基类中有一个封装好的findAll()方法来获取所有的数据,但是我们在子类(我们自己的服务)中重写为只获取当前operator的所有数据,所以乍一看没有问题,但是如果有人先写了使用findAll()方法的代码并且稳定运行,业务逻辑被后续人修改,就会出现异常。解决方法:子类可以扩展父类的功能,但不能改变父类原有的功能。不要重写或重载父类的功能。2.用代码演示依赖倒置原理假设我们现在有这样一个方法:publicinterfaceJpaRepository{//默认是获取所有数据ListfindAll();}假设同事A已经使用了上面的方法开发,代码已经稳定可以用,但是同事B在自己的代码中覆盖了这个方法:publicinterfaceUserRepositoryextendsJpaRepository{//只查询状态未禁用的用户@Query(value="select*fromuserwherestatus=1")ListfindAll();}这样会导致原来运行的程序有bug,严重的可能会报空指针异常或者逻辑错误等等。3.小结在使用继承时,遵循里氏代换原则。除了增加新的方法完成功能外,不要重写父类A的方法,不要重载父类A的方法。继承虽然好用,但是如果用不好会出现很多问题,而且写代码的时候一定要考虑修改父类后是否会影响到所有子类的功能。