首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

里氏替换原则Liskov Substitution Principle, LSP)

以此回顾所读《设计模式之禅》与《高校程序员的45个习惯》中Liskov部分 定义: 第一种:If for each object O1 of type S there is an object...(注意顺序,父类可以用子类来替换,但是子类不一定能被父类替换) 为什么使用里氏替换原则?...但是如果开发人员派生了一个BasicUtils的子类,并改变了排序的意义,使返回的列表逆序排列,这样子类对象替换父类对象后,程序运行结果发生错误,违反了里氏替换原则。...(3)里氏替换原则可以增强程序的健壮性,版本升级也可以具有很好的兼容性,即使增加子类,原有的子类还是可以继续运行 如何理解和使用里氏替换原则? 1、子类必须完全实现父类的方法。...2、子类可以有自己的个性 子类可以有自己不同于父类的属性和行为,里氏替换原则只强调子类可以自由替换父类,并不需要反过来也成立,而且往往用父类替换子类是不安全的。

95120

设计模式学习--面向对象的5条设计原则Liskov替换原则--LSP

一、LSP简介(LSP--Liskov Substitution Principle): 定义:如果对于类型S的每一个对象o1,都有一个类型T的对象o2,使对于任意用类型T定义的程序P,将o2替换为o1...子类型必须能够替换它的基类型。LSP又称里氏替换原则。 对于这个原则,通俗一些的理解就是,父类的方法都要在子类中实现或者重写。...现在看来,一个系统或子系统要拥有良好的扩展性和实现运行期内绑定,有两个必要条件:第一是依赖倒置原则;第二是里氏替换原则。这两个原则缺一不可。...,但这远远不够,因为它不满足依赖颠倒原则和里氏替换原则。...4、派生类的退化函数:派生类的某些函数退化(变得没有用处),Base的使用者不知道不能调用f,会导致替换违规。在派生类中存在退化函数并不总是表示违反了LSP,但是当存在这种情况时,应该引起注意。

68350
您找到你想要的搜索结果了吗?
是的
没有找到

java设计原则--里氏替换原则

java的核心特性之一:继承,Java中的继承时单继承,子类继承了父类后就可以使用父类的属性和方法(私有属性和方法以外),子类需要重写父类的抽象方法,继承机制在一定程度上提高了代码的复用性,提高了代码的可拓展性...也就是说子类继承了父类就必须拥有父类所有的属性和方法 缺点二:灵活性降低,子类必须拥有父类的属性和方法,让子类多了些约束 缺点三:增强了耦合性,当父类的常量、变量和方法被修改时需要考虑子类的修改 里式替换作用...Java的单继承机制从总体上看是利大于弊,那么,如何让利的优势发挥最大,同时减少弊的带来的麻烦呢,于是就有了里式替换原则,里氏替换原则为良好的继承定义了一个规范 我们在做系统设计时,经常会定义一个接口或抽象类...,然后编码实现,调用类则直接传入接口或抽象类,其实这里已经使用了里氏替换原则 举一个CS的案例: 枪的主要职责是射击,如何射击在各个具体的子类中定义,手枪是 单发射程比较近,步枪威力大射程远,机枪用于扫射...注意 在类中调用其他类时务必要使用父类或接口,如果不能使 用父类或接口,则说明类的设计已经违背了LSP原则 本文内容参考设计模式之禅,仅用于个人学习,如有不妥请联系删除

84720

【愚公系列】2023年11月 面向对象设计原则(三)-里氏替换原则(Liskov Substitution Principle or LSP)

《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。...一、里氏替换原则(Liskov Substitution Principle or LSP)里氏替换原则(Liskov Substitution Principle or LSP)是面向对象设计中的一个基本原则...换句话说,这个原则要求子类必须能够完全替换父类,并且子类在替换父类的过程中,不改变原有的程序行为。 这样做可以确保代码的可维护性、可扩展性和代码的可重用性。...I'm a(n) Liskov.Circle!里氏替换原则根据“运行时子类对象覆盖父类对象”的特点,可以很方便的对系统进行扩展,只需要增加子类而无需更改任何现有代码。...1.子类必须完全实现父类的方法2.子类可以有自己的个性:从里氏替换原则来看,就是有子类出现的地方父类未必就可以出现。

22121

Java设计原则—里氏替换原则(转)

里氏替换原则(Liskov Substitution Principel)是解决继承带来的问题。...通俗点讲,只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是,反过来就不行了,有子类出现的地方,父类未必就能适应。...含义: 子类必须完全实现父类的方法 在类中调用其他类时务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了里氏替换原则。...覆盖或实现父类的方法时输出结果可以被缩小 目的: 采用里氏替换原则的目的就是增强程序的健壮性,版本升级是也可以保持非常好的兼容性。即使增加子类,原有的子类还可以继续运行。

31510

【愚公系列】2021年12月 面向对象设计原则(三)-里氏替换原则(Liskov Substitution Principle or LSP)

文章目录 前言 一、里氏替换原则(Liskov Substitution Principle or LSP) 二、使用步骤 示例 总结 前言 常用的面向对象设计原则有七个,这七大设计原则都是以可维护性和可复用性为基础的...,这些原则并不是孤立存在的,它们相互依赖相互补充,遵循这些设计原则可以有效地提高系统的复用性,同时提高系统的可维护性。...提示:以下是本篇文章正文内容,下面案例可供参考 一、里氏替换原则(Liskov Substitution Principle or LSP) 所有引用基类的地方必须透明的使用其子类的对象。...里氏替换原则要求尽可能的使用其基类作为方法的参数,以下给出一个解决方案以供参考: public static void DoSomething(Shape shape) { var area...I'm a(n) Liskov.Circle! 总结 里氏替换原则根据“运行时子类对象覆盖父类对象”的特点,可以很方便的对系统进行扩展,只需要增加子类而无需更改任何现有代码。

19710

java设计模式3,里氏替换原则

一、里氏替换原则定义 在面向对象的程序设计中,里氏替换原则Liskov Substitution principle)是对子类型的特别定义。...芭芭拉·利斯科夫与周以真(Jeannette Wing)在1994年发表论文并提出以上的Liskov代换原则。...二、里氏替换原则的作用 里氏替换原则是实现开闭原则的重要方式之一; 解决了继承中重写父类造成的可复用性变差的问题; 是动作正确性的保证,即类的扩展不会给已有的系统引入新的错误,降低了出错的可能性。...此时继承父类实现的敖丙并不满足里氏替换原则,也就是说,此时的子类不能承担原父类的功能,直接给哪吒用,因为称号、师傅、混元珠也都也不一样嘛。...如果使用了继承,就一定要遵从里氏替换原则,否则会让代码出现问题的概率变大。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

66130

里氏替换原则

设计模式六大原则之二:里氏替换原则 简介 姓名 :里氏替换原则 英文名 :Liskov Substitution Principle 座右铭 : 1....老爹开车,前方注意 里氏替换原则定义了什么是父子,还有一点要注意的,就是儿子不能在父亲会的技能上搞“创新”。...所以说里氏替换原则就是在定义父子关系,大家都遵守这个定义,就会一代比一代好,不遵守大家也看到了,把前辈传下来的都毁于一旦了。...(来自《设计模式之禅》) 总结 好了,里氏替换原则的大概原理讲得差不多,大家只要记住是在定义“父子关系”,就像游戏规则一样,定义后让大家遵守,会让大家的程序在后面越来越复杂的时候也能清晰,而不会越来越乱...参考资料 《大话设计模式》、《Java设计模式》、《设计模式之禅》、《研磨设计模式》、《Head First 设计模式》

54830

设计模式原则:里氏替换原则

里氏替换原则 里氏替换原则表示如果对每一个类型为 S 的对象 o1 都有类型为 T 的对象 o2 ,使得以 T 定义的所有程序 P 在所有的对象 o1 都代换成 o2 时 ,程序 P 的行为没有发生变化...也就是说,在程序中可以将子类对象替换父类对象,而程序逻辑不变。 里氏替换原则是继承复用的基础,它体现了子类和父类之间的关系。...如果一个软件能够遵循里氏替换原则,那么它就具有以下两个优点: 保证了父类的抽象性和可复用性,子类可以扩展父类的功能,但不会破坏父类的约束和规范。...这个类就违反了里氏替换原则,因为它改变了父类的行为含义,使得在程序中无法将 Bird 对象替换 Animal 对象,而不改变程序的逻辑。...extends Animal { @Override public void run() { System.out.println("鸟可以飞行"); } } 为了遵循里氏替换原则

18530

违反这些设计原则,系统就等着“腐烂”

LOD 里氏替换原则 里氏替换原则(Liskov Substitution Principle,英文简称:LSP),它由芭芭拉·利斯科夫(Barbara Liskov)在1988年提出。...里氏替换原则的含义是:如果一个程序中所有使用基类的地方都可以用其子类来替换,而程序的行为没有发生变化,那么这个子类就遵守了里氏替换原则。...下面咱们用里式替换原则比较经典的例子来说明“鸵鸟不是鸟”。...最终我们看一下类图: 老猫觉得里氏替换原则是最难把握好的,所以到后续咱们再进行深入设计模式回归的时候再做深入探究。...看个例子,当我们刚学java的时候都是从jdbc开始学起来的。所以对于DBConnection我们并不陌生。

13310

模式-“里氏替换原则

大家好,又见面了,我是全栈君 里氏替换原则是,同组的有类的两个子类,在使用子类A这个地方(方法/属性)您可以使用子类 B代替.对于面向接口编程,我只需要确保同样的行为代码;基类的所有子类必须全部...Concrete c); 策略模式:一般,我们把解决某个问题的方法称为一个”算法”,而把解决一类问题的算法封装 成一个接口,那么实现算法的多种方式作为子类;在某个时候,在调用中我们使用算法A替换...算法B,这就是策略模式在里氏代换原则中的应用; ***************策略模式************************************ >准备一组算法,并将每个封装起来使的他们能够互换...************************************ 代理模式:代理和被代理对象相同拥有一样的行为,我们把它封装成一个接口,那么,在被 代理对象被调用的地方都能够使用代理对象替换以隐藏实现细节...这是与里氏代换原则; *********************************************************** 发布者:全栈程序员栈长,转载请注明出处:https://

28821

面向对象设计原则-里氏替换原则

里氏替换原则Liskov Substitution Principle,LSP)是面向对象设计中的一个重要原则,它由Barbara Liskov提出。...这个原则的基本思想是,派生类必须能够完全替换其基类。也就是说,子类对象能够在不改变程序正确性的前提下,替换掉父类对象。这个原则的目的是帮助设计师避免在使用继承时可能会出现的错误和问题。...下面将详细介绍LSP以及如何在Java中应用该原则。LSP的定义LSP原则的正式定义是:“如果S是T的一个子类型,那么S对象可以替换T对象,而程序执行的结果不会发生变化。”...LSP的实现方法在Java中,实现LSP的方法有以下几个方面:(1)子类必须实现父类的所有抽象方法如果一个父类是抽象类或者接口,那么它的所有子类必须实现父类的所有抽象方法。...这就是LSP原则的体现。

24010

可能是最好的设计模式入门教程——里氏替换原则

里氏替换原则Liskov Substitution Principle,LSP)是面向对象设计(OOD)中比较重要、常见的一种,下面来总结里氏替换原则的知识点,包括: 维基百科定义 在面向对象的程序设计中...,里氏替换原则Liskov Substitution principle)是对子类型的特别定义。...重写虚方法才会有多态,重写非虚方法对于面向接口编程意义不大,所以理解里氏原则,得以面向接口编程作思考… JAVA中,多态是不是违背了里氏替换原则??...Liskov替换原则,主要着眼于对抽象和多态建立在继承的基础上,因此只有遵循了Liskov替换原则,才能保证继承复用是可靠地。...Liskov替换原则是关于继承机制的设计原则违反Liskov替换原则就必然导致违反开放封闭原则

1.4K31

软件架构设计原则--里氏替换原则

本专栏内容参考自:咕泡学院Tom老师的《Spring5核心原理与30个类手写实战》,仅作个人学习记录使用,如有侵权,联系速删   里氏替换原则Liskov Substitution Principle...使用里氏替换原则有以下优点: 约束继承泛滥,这是开闭原则的一种体现。 加强程序的健壮性,同时变更时也可以做到非常好的兼容性,提高程序的可维护性和扩展性,降低需求变更时引入的风险。   ...用一个经典的业务场景:用正方形、矩形、和四边形的关系说明里氏替换原则,我们都知道正方形是一个特殊的长方形,所以可以创建一个父类Rectangle: public class Rectangle {...square = new Square(); square.setLength(10); resize(square); }   对已有功能造成了影响,违背里氏替换原则...里氏替换原则只存在于父类和子类之间,约束继承泛滥。

31230

Java设计模式:(1)设计模式七大设计原则-里氏替换原则

比如使用继承会给程序带来侵入型,程序的可移植性降低,增加对象间的耦合性,如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑 到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能产生故障 里氏替换原则...1)在使用继承时,遵循里氏替换规则,在子类中尽量不要重写父类的方法 2)里氏替换原则表示:继承实际上让两个类耦合性增强了,在适当的情况下,可以通过聚合,组合,依赖来解决问题 举个例子1 public...class Liskov01 { public static void main(String[] args) { A a = new A(); System.out.println...举个例子2 public class Liskov { public static void main(String[] args) { A a = new A();

42120
领券