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

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


相关文章
|
6天前
|
设计模式 Java 开发者
Java设计模式七大原则之里氏替换原则
Java设计模式七大原则之里氏替换原则
29 0
|
11月前
|
设计模式 XML JSON
【Java设计模式 经典设计原则】一 SOLID-SRP单一职责原则
【Java设计模式 经典设计原则】一 SOLID-SRP单一职责原则
68 0
|
11月前
|
设计模式 搜索推荐 安全
【Java设计模式 经典设计原则】三 SOLID-LSP里式替换原则
【Java设计模式 经典设计原则】三 SOLID-LSP里式替换原则
102 0
|
11月前
|
消息中间件 设计模式 存储
【Java设计模式 经典设计原则】二 SOLID-OCP开闭原则
【Java设计模式 经典设计原则】二 SOLID-OCP开闭原则
72 0
|
11月前
|
设计模式 消息中间件 存储
【Java设计模式 经典设计原则】四 SOLID-ISP接口隔离原则
【Java设计模式 经典设计原则】四 SOLID-ISP接口隔离原则
111 0
|
11月前
|
设计模式 Java 关系型数据库
【Java设计模式 经典设计原则】五 SOLID-DIP依赖反转原则
【Java设计模式 经典设计原则】五 SOLID-DIP依赖反转原则
82 0
|
12月前
|
程序员 测试技术
面向对象设计五个基本原则
只有聪明人才能看见的简介~( ̄▽ ̄~)~
80 0
|
设计模式 消息中间件 存储
软件设计 软件设计模式之SOLID原则
软件设计 软件设计模式之SOLID原则
76 0
|
安全
一分钟搞懂 SOLID 原则
一分钟搞懂 SOLID 原则
158 0
一分钟搞懂 SOLID 原则
|
设计模式
里氏替换原则|设计原则
里氏替换原则的内容可以描述为: “派生类(子类)对象可以在程序中代替其基类(超类)对象。”