`
gcq04552015
  • 浏览: 460820 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

 
阅读更多
里氏替换原则(Liskov Substitution Principel)是解决继承带来的问题。



继承的优点:

•代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性;
•提高代码的重用性;
•子类可以形似父类,但又异于父类;
•提高代码的可扩展性;
•提高产品或项目的开放性。
继承的缺点:

•继承是侵入性的,只要继承就必须拥有父类的所有属性和方法;
•降低代码的灵活性,子类必须拥有父类的属性和方法,让子类增加了约束;
•增强了耦合性,当父类的常量、变量和方法被修改时,必须考虑子类的修改。 
定义:

所有引用基类的地方必须能透明地使用其子类的对象。

通俗点讲,只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是,反过来就不行了,有子类出现的地方,父类未必就能适应。



含义:

•子类必须完全实现父类的方法
在类中调用其他类时务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了里氏替换原则。

如果子类不能完整地实现父类的方法,或者父类的某些方法在子类中发生了“畸变”,则建议断开父子继承关系,采用依赖、聚集、组合等关系代替继承。

•子类可以有自己的个性 
•覆盖或实现父类的方法时输入参数可以被放大
如果子类的前置条件较小,子类在没有覆写父类的方法的前提下,子类方法被执行了,这会引起业务逻辑混乱,因为在实际应用中父类一般都是抽象类,子类是实现类,你传递一个这样的实现类就会“歪曲”了父类的意图,引起一堆意想不到的业务逻辑混乱。

•覆盖或实现父类的方法时输出结果可以被缩小 
目的:

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

相关推荐

    23种 设计模式---面向对象的基本原则

    3. 里氏替换原则(Liskov Substitution Principle, LSP):子类型必须能够替换掉它们的基类型。这保证了继承不会破坏原有的程序行为。 4. 接口隔离原则(Interface Segregation Principle, ISP):不应该强迫客户端...

    24种设计模式介绍与6大设计原则

    二、设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序...

    设计模式——JAVA.docx

    ### JAVA设计模式总结之23种设计模式及六大原则 #### 一、设计模式之六大原则 ##### 总原则:开闭原则(Open Close Principle) 开闭原则是设计模式中最核心的原则之一,它强调的是软件实体(类、模块、函数等)...

    设计模式Demo

    二、设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序...

    Java23种基本的设计模式整料整理学习源码示例zip

    设计模式的六大原则 开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好...

    HeadFirst设计模式

    - **里氏替换原则**(LSP): 子类必须能够替换它们的基类。 - **依赖倒置原则**(DIP): 高层模块不应该依赖于低层模块,二者都应该依赖于抽象。 - **接口隔离原则**(ISP): 不应该强迫客户端依赖于它不使用的方法。 ...

    Java设计模式经典搞笑珍藏版

    本书还详细介绍了六大设计原则,包括单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则和开闭原则。这些原则是编写高质量、易于维护的代码的基础。 **单一职责原则** (Single Responsibility ...

    设计模式design-pattern-java.pdf

    里氏代换原则(Liskov Substitution Principle, LSP)强调子类必须能够替换其基类,并且能够保证程序的正确性。这有助于避免在使用继承时可能出现的一些潜在问题。 #### 1.2.4 面向对象设计原则之依赖倒转原则 ...

    java设计模式

    2. **里氏替换原则 (Liskov Substitution Principle, LSP):** 子类型必须能够替换它们的基类型。 3. **依赖倒置原则 (Dependency Inversion Principle, DIP):** 高层模块不应该依赖于低层模块,二者都应该依赖于...

    Software-Engineering-Design

    在软件工程设计中,我们遵循一些基本原则,如单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP)。这些原则指导我们编写易于理解和维护的代码。同时,设计模式...

Global site tag (gtag.js) - Google Analytics