架构整洁之道-06 设计原则-里氏代换LSP

简介: 里氏替换原则 Liskov Substitution Principle,LSPInheritance should ensure that any property proved about supertype objects also holds for subtype objects继承必须确保超类所拥有的性质在子类中仍然成立。

里氏替换

里氏替换原则 Liskov Substitution Principle,LSP

Inheritance should ensure that any property proved about supertype objects also holds for subtype objects

继承必须确保超类所拥有的性质在子类中仍然成立。

里氏替换原则,主要在阐述关于继承的一些原则。什么时候使用继承,什么时候不应该使用继承。主要反映基类和子类之间的关系,是对开闭原则的补充,是对实现抽象化的具体步骤的规范。

通过以下Demo来分析,继承时应该避免出现的问题:

class Bird {
  private flyTime: number;
  constructor(flyTime:number){
    this.flyTime = flyTime;
  }
  getFlyTime(){
    console.log(`鸟的飞行时间:${this.flyTime}`);
  }
}
​
class Ostrich extends Bird {
  constructor(fltTime:number){
    super(fltTime)
  }
​
  getFlyTime(){
    console.log(`鸵鸟不会飞`);
  }
}
​
(()=>{
  const ostrich = new Ostrich(12);
  ostrich.getFlyTime();
})();

以上程序是没有问题,但在设计上有问题:Ostrich类继承了Bird类,同时也重写了getFlyTime方法,改变了父类使用该方法是为了计算飞行时间的,这样的调用存在着风险,违反了里氏替换原则。因为里氏替换原则是实现开闭原则的重要方式之一,所以修改了父类的方法,是没有进行扩展,而是进行修改的操作。

解决方案是,去掉他们之间的继承关系。可以新建一个基类,增加计算飞行时间方法和输出特性方法,Bird和Ostrich类分别继承新的基类,实现各自的功能。

如何正确使用继承

  • 子类可以扩展父类的功能,但尽量不改变父类原有的功能
  • 子类的方法实现父类的方法时,条件可以增强但是功能应该是对等的,
  • 子类可以增加自己特有的方法

里氏替换原则作用

  • 它避免了因继承父类造成可复用性降低的缺点
  • 它是动作正确性保证,即父类要实现的功能还是保持一致,避免引入新的错误。
  • 加强程序的健壮性,同时变更时可以做到非常好的兼容性

参考资料

目录
相关文章
|
3月前
|
前端开发 Java 测试技术
使用整洁架构优化你的 Gradle Module
使用整洁架构优化你的 Gradle Module
43 0
|
6月前
|
存储 Go 数据处理
Go 语言整洁架构实践
Go 语言整洁架构实践
48 0
|
7月前
|
存储 数据库 开发者
单元化架构的设计原则:让开发者、组件和数据都能透明化,同时保证业务可分片和业务自包含。
单元化架构的设计原则:让开发者、组件和数据都能透明化,同时保证业务可分片和业务自包含。
|
8月前
|
设计模式 关系型数据库
软件架构设计原则之迪米特法则
迪米特原则(Law of Demeter LoD)是指一个对象应该对其他对象保持最少的了解,又叫最少知道原则(Least Knowledge Principle,LKP),尽量降低类与类之间的耦合度。迪米特原则主要强调:只和朋友交流,不和陌生人说话。出现在成员变量、方法的输入、输出参数中的类都可以称为成员朋友类,而出现在方法体内部的类不属于朋友类。
68 1
|
10月前
|
安全
带你读《阿里云卓越架构白皮书》——1、安全设计原则(1)
带你读《阿里云卓越架构白皮书》——1、安全设计原则(1)
389 0
|
10月前
|
安全
带你读《阿里云卓越架构白皮书》——1、安全设计原则(2)
带你读《阿里云卓越架构白皮书》——1、安全设计原则(2)
359 0
|
10月前
带你读《阿里云卓越架构白皮书》——2、设计原则
带你读《阿里云卓越架构白皮书》——2、设计原则
287 0
|
10月前
带你读《阿里云卓越架构白皮书》——1、设计原则
带你读《阿里云卓越架构白皮书》——1、设计原则
236 0
|
10月前
带你读《阿里云卓越架构白皮书》——1、卓越运营设计原则(1)
带你读《阿里云卓越架构白皮书》——1、卓越运营设计原则(1)
180 0
|
10月前
带你读《阿里云卓越架构白皮书》——1、卓越运营设计原则(2)
带你读《阿里云卓越架构白皮书》——1、卓越运营设计原则(2)
158 0