学习设计模式 - 六大基本原则之里氏替换原则

Posted timfruit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习设计模式 - 六大基本原则之里氏替换原则相关的知识,希望对你有一定的参考价值。

  设计模式总共有六大基本原则,统称为SOLID (稳定)原则,分别是S-单一职责原则(Single Responsibility Principle), O-开闭原则(Open closed Principle),L-里氏替换原则(Liskov Substitution Principle),L-迪米特法则(Law of Demeter),I-接口隔离原则(Interface Segregation Principle),D-依赖倒置原则(Dependence Invension Principle)。

 


 

L-里氏替换原则(Liskov Substitution Principle)

 一、定义

   所有引用基类的地方,都必须能透明的使用其子类的对象(Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it)。

 

二、理解

   凡是父类出现的地方,子类就可以出现,并且不会出现任何错误或异常。这个原则的用意是在告诫我们,子类继承父类要完全可以承担父类的职责,当一个子类不能完全实现父类的业务逻辑时,需要使用依赖、聚集、组合等关系替代。里氏替换原则是实现依赖倒置原则的重要保障。

 

三、如何使用里氏替换原则

  使用里氏替换原则,我们要牢牢把握住里氏替换原则的核心——凡是父类出现的地方,子类就可以出现,并且不会出现任何错误和异常。当我们用子类代替父类的位置时,我们需要考虑父类方法参数当做子类方法参数是否合适、子类方法输出结果是否在父类方法输出结果范围之内、子类方法实现是否可以完全实现父类的方法。所以,里氏替换原则有如下使用准则:

  1. 子类必须完全实现父类的方法

  2. 子类可以有自己的行为与外观

  3. 覆盖或实现父类的方法输入参数可以被放大

  4. 覆写或实现父类的方法时输出结果可以被缩小

 

四、注意事项

  采用里氏替换原则的目的就是增强程序的健壮性,版本升级时也可以保持非常好的兼容性,即时增加子类,原有的子类还可以继续运行。在实际项目中,每个子类对应不同的业务含义,使用父类作为参数,传递不同的子类完成不同的业务逻辑。

  在项目中,采用里氏替换原则时,尽量避免子类的“个性”。一旦子类拥有了“个性”,父子关系就难以调和。一方面,如果把子类当做父类使用,子类的“个性”就会被抹杀;另一方面,如果把子类单独作为一个业务使用,就会让代码间的耦合关系变得扑朔迷离,缺乏类替换的标准。

 

 

学习资料:

《设计模式之禅》秦小波 著

 

以上是关于学习设计模式 - 六大基本原则之里氏替换原则的主要内容,如果未能解决你的问题,请参考以下文章

设计模式 - 六大设计原则之LSP(里氏替换)

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

「设计模式」六大原则之三:里氏替换原则小结

「设计模式」六大原则之三:里氏替换原则小结

「设计模式」六大原则之三:里氏替换原则小结

「设计模式」六大原则之三:里氏替换原则小结