设计模式六大原则之里氏替换原则

  OO中继承的包含一层这样的含义:父类中凡是已经实现好的方法,实际上是在设定规范的契约,虽然它不强制要求所有的父类遵循这些契约,但是如果子类对这些已经实现的方法任意修改,就会对整个继承体系造成破坏。

  继承在给程序设计带来便利的同时,也带来了弊端。比如使用继承会给程序带入侵入性,程序的可移植性降低,增加对象间的耦合性,如果一个类被其他的类所继承,则当这个类需要修改的时候,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能产生故障。

  继承优点:提高代码复用性、可扩展性

  继承缺点:侵入性(只要继承就必须拥有父类的所有方法和属性,一定程序约束子类);耦合性增强(父类修改时需要考虑所有子类,很可能造成子类功能出现故障)

一、里氏替换原则

  在使用继承时,遵循里氏替换原则,在子类中尽量不要重写父类的方法。

  里氏替换原则告诉我们,继承实际上让两个类耦合性增强,在适当的情况下,可以通过聚合、组合、依赖来解决问题

二、案例演示

  案例地址:https://github.com/Simple-Coder/design-pattern

1、代码实现

 问题:发现原有正常的相减功能发生了错误,原因就是B类无意中重写了父类的方法,造成原有功能出现错误,在实际编程中,我们常常会通过重写父类的方法完成新的功能,这样写起来虽然简单,但整个继承体系的复用性会比较差

通用做法:原来的父类和子类都继承一个更加通俗的基类,原有的继承关系去掉,采用依赖、聚合、组合等关系代替。

2、UML类图比较

 原有B是继承A,现在将B类提升,使其成为Base的子类,如果B类还要用到A类,可以采用依赖、聚合、组合等关系,这样就满足了里氏替换原则

三、总结

  里氏替换原则,一句话:在子类中尽量不要重写父类的方法

posted @ 2020-03-21 15:28  coder、  阅读(1052)  评论(0编辑  收藏  举报