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

  设计模式总共有六大基本原则,统称为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. 覆写或实现父类的方法时输出结果可以被缩小

四、注意事项

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

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

学习资料:

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

原文地址:https://www.cnblogs.com/timfruit/p/9440249.html

时间: 2024-12-11 22:47:36

学习设计模式 - 六大基本原则之里氏替换原则的相关文章

学习设计模式 - 六大基本原则之依赖倒置原则

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

学习设计模式 - 六大基本原则之单一职责原则

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

学习设计模式 - 六大基本原则之开闭原则

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

学习设计模式 - 六大基本原则之迪米特法则

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

设计模式课程 设计模式精讲 3-9 里氏替换原则讲解

1 课程讲义 1.1 定义 1.2 特色 1.3 优点 1 课程讲义 1.1 定义 定义:如果对每一个类型为T1的对象o1,都有类型为T2的对象02,使得以T1定义的所有程序P在所有的对象o1都替换成o2时,程序P的行为没有发生变化,那么类型T2是类型T1的子类型.定义扩展:一个软件实体如果适用一个父类的话,那一定适用于其子类,所有引用父类的地方必须能透明地使用其子类的对象,子类对象能够替换父类对象,而程序逻辑不变.(反对子类重写父类) 1.2 特色 ◆引申意义:子类可以扩展父类的功能,但不能改

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

一.概念: 里氏替换原则:LSP (Liskov Substitution Principle),如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都换成o2时,程序P的行为没有变化,那么类型T2是类型T1的子类型. 通俗的定义:所有引用基类的地方必须能透明地使用其子类的对象. 二.例子: 以浇水为例.人,拿到工具[水管.水桶.瓶子],装水后都可以浇水.[水管.桶.瓶子]都可以获取水.应该有个loadWater方法.有watering 浇水功能

设计模式六大原则(2):里氏替换原则

里氏替换原则 肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑.其实原因就是这项原则最早是在1988年,由麻省理工学院的一位姓里的女士(Barbara Liskov)提出来的. 定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型. 定义2:所有引用基类的地方必须能透明地使用其子类的对象. 问题由来:有一功能P1,由

设计模式六大原则(2):里氏替换原则(转载)

肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑.其实原因就是这项原则最早是在1988年,由麻省理工学院的一位姓里的女士(Barbara Liskov)提出来的. 定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型. 定义2:所有引用基类的地方必须能透明地使用其子类的对象. 问题由来:有一功能P1,由类A完成.现需

设计模式六大原则(2):里氏替换原则(Liskov Substitution Principle)

肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑.其实原因就是这项原则最早是在1988年,由麻省理工学院的一位姓里的女士(Barbara Liskov)提出来的. 定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型. 定义2:所有引用基类的地方必须能透明地使用其子类的对象. 问题由来:有一功能P1,由类A完成.现需