美文网首页
(设计模式原则)SOLID L原则 -- 里氏代换原则

(设计模式原则)SOLID L原则 -- 里氏代换原则

作者: 乔什华 | 来源:发表于2016-10-01 14:38 被阅读0次

    里氏代换原则

    定义

    在软件开发中,父类都替换成它的子类,程序的行为没有变化。通俗来说,子类可以扩展父类的功能,但不能改变父类原有的功能

    • 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
    • 子类中可以增加自己特有的方法。
    • 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松
    • 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格

    问题由来

    有一功能P1,由类A完成。现需要将功能P1进行扩展,扩展后的功能为P,其中P由原有功能P1与新功能P2组成。新功能P由类A的子类B来完成,则子类B在完成新功能P2的同时,有可能会导致原有功能P1发生故障

    解决方案:当使用继承时,遵循里氏替换原则。类B继承类A时,除添加新的方法完成新增功能P2外,尽量不要重写父类A的方法,也尽量不要重载父类A的方法

    解决办法

    在实际编程中,我们常常会通过重写父类的方法来完成新的功能,这样写起来虽然简单,但是整个继承体系的可复用性会比较差,特别是运用多态比较频繁时,程序运行出错的几率非常大。如果非要重写父类的方法,比较通用的做法是:原来的父类和子类都继承一个更通俗的基类,原有的继承关系去掉,采用依赖、聚合,组合等关系代替

    Reference

    卡奴达摩专栏 -- 设计模式六大原则(2):里氏替换原则

    相关文章

      网友评论

          本文标题:(设计模式原则)SOLID L原则 -- 里氏代换原则

          本文链接:https://www.haomeiwen.com/subject/zmbryttx.html