SOLID原则之里氏替换原则

简介: SOLID原则之里氏替换原则

里氏替换原则 L iskov Substitution Principle

里氏替换原则是指任意父类,都可以用它的子类来替换,而且不会出现异常或者错误的结果。

关于里氏替换原则比较经典的例子是矩形和正方形的例子。

class Rectangle
    def initialize(width, length)
       @width = width
        @length = length 
   end
   def caculate_area
       @width * @length
   end
end
class Square < Rectangle
    def initialize(length)
        @width = length
         @length = length
    end
end

假如说我们有段代码:

rec = Rectangle.new(5, 4)
rec.caculate_area  #=> 20

但是如果我们用它的子类,Square来替换Rectangle的时候,我们程序就会报错。

这意味着我们违反了里氏替换原则。所以说这样的抽象是不正确的抽象。

正确的抽象可以让Rectangle 和Square都继承于某个类,比如说类Shape. 为了让我们的类Shape看上去更有用,我故意增加了一个方法,inspect。

class Shape
   def inspect
      puts "I am a #{self.class}."
   end
end
class Rectangle < Shape
   attr_accessor :width, :length
   def caculate_area
       @width * @length
   end
end
class Square < Shape
  attr_accessor :width
   def caculate_area
      @width ** 2
    end
end

可能很多同学会问,这个原则的意义在哪?这个原则的意义在于,遵守里氏替换原则,有助于我们遵守开关原则


相关文章
|
3月前
|
Java 关系型数据库
SOLID设计原则:接口隔离原则
本文探讨接口隔离原则(ISP),它是SOLID原则之一,强调不应强迫客户依赖不使用的方法。通过将接口拆分为多个具体接口,可以避免不必要的依赖,提高系统灵活性。接口隔离原则不同于单一职责原则,前者关注接口设计,后者关注类的职责划分。合理应用ISP可以提升代码质量,但在实践中需注意适度细化,避免过度设计。
47 6
|
3月前
|
设计模式 算法 Java
SOLID设计原则:开闭原则
本文通过电商库存系统的例子,详细介绍了开闭原则(OCP)的实现方法,强调“对扩展开放,对修改关闭”的核心理念。文中展示了如何利用继承、接口和多态性避免频繁修改代码,并通过策略模式和装饰器模式等设计模式实现灵活扩展。通过具体案例分析,帮助读者理解开闭原则的应用场景与实践技巧,提升代码质量和可维护性。文章还鼓励开发者在日常业务开发中应用设计模式,以提高技术水平。
61 6
|
3月前
|
存储 Java 数据库连接
SOLID设计原则:依赖倒置原则
本文介绍了依赖倒置原则,即高层模块不依赖低层模块,而是共同依赖抽象。直接依赖会导致紧耦合、难以测试和重用性差等问题。通过引入抽象层或独立抽象组件包,可以实现依赖倒置,提高系统灵活性和可维护性。Spring 和 Java SPI 是依赖倒置原则的典型应用。遵循该原则有助于设计更灵活、可扩展的系统架构。
56 3
|
3月前
|
供应链 Java BI
SOLID设计原则系列之--单一职责原则
本文详细探讨了单一职责原则(SRP),通过分析其定义演变,解释了如何确保软件模块职责单一。文中提供了两个Java示例,展示了违反SRP的设计问题及其解决方案。总结了SRP在实际工作中的应用,并强调了其对提高代码质量和系统灵活性的重要性。适合开发者学习参考。
38 6
|
3月前
|
分布式计算 Java 关系型数据库
SOLID设计原则:里式替换原则
本文详细介绍了SOLID设计原则中的Liskov替换原则(LSP),并通过实例解释了其核心概念:子类型应能在不破坏应用的情况下替换父类型。文章首先从科学定义出发,逐步引出LSP的实际意义,并通过经典的正方形与长方形代码示例展示了违反LSP的问题及其解决方案。接着,通过股票交易场景进一步说明了如何正确应用LSP。最后总结了LSP的重要性及其在软件开发中的应用技巧。
57 8
|
4月前
|
关系型数据库 开发者
|
5月前
|
关系型数据库 测试技术
|
6月前
|
开发者 Python
软件开发中的 DRY、KISS 和 SOLID 原则
**软件开发中的DRY、KISS和SOLID原则概览** - **DRY (Don&#39;t Repeat Yourself)**: 避免代码重复,确保每项知识在系统中有唯一表示,减少冗余,提高可维护性。例如,通过封装重复逻辑到函数或类。
131 0
|
设计模式 XML JSON
【Java设计模式 经典设计原则】一 SOLID-SRP单一职责原则
【Java设计模式 经典设计原则】一 SOLID-SRP单一职责原则
106 0
|
设计模式 Java 关系型数据库
【Java设计模式 经典设计原则】五 SOLID-DIP依赖反转原则
【Java设计模式 经典设计原则】五 SOLID-DIP依赖反转原则
132 0