架构整洁之道-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();
})();
AI 代码解读

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

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

如何正确使用继承

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

里氏替换原则作用

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

参考资料

目录
相关文章
使用整洁架构优化你的 Gradle Module
使用整洁架构优化你的 Gradle Module
79 0
Go 语言整洁架构实践
Go 语言整洁架构实践
121 0
云原生架构下的微服务设计原则与实践####
本文深入探讨了在云原生环境中,微服务架构的设计原则、关键技术及实践案例。通过剖析传统单体架构面临的挑战,引出微服务作为解决方案的优势,并详细阐述了微服务设计的几大核心原则:单一职责、独立部署、弹性伸缩和服务自治。文章还介绍了容器化技术、Kubernetes等云原生工具如何助力微服务的高效实施,并通过一个实际项目案例,展示了从服务拆分到持续集成/持续部署(CI/CD)流程的完整实现路径,为读者提供了宝贵的实践经验和启发。 ####
深入理解微服务架构:从设计原则到实践应用
深入理解微服务架构:从设计原则到实践应用
深入理解微服务架构:设计原则、挑战与实践
深入理解微服务架构:设计原则、挑战与实践
云原生架构下的微服务设计原则与实践####
【10月更文挑战第20天】 本文深入探讨了云原生环境中微服务设计的几大核心原则,包括服务的细粒度划分、无状态性、独立部署、自动化管理及容错机制。通过分析这些原则背后的技术逻辑与业务价值,结合具体案例,展示了如何在现代云平台上实现高效、灵活且可扩展的微服务架构,以应对快速变化的市场需求和技术挑战。 ####
56 7
云原生架构下的微服务设计原则与最佳实践##
在数字化转型的浪潮中,云原生技术以其高效、灵活和可扩展的特性成为企业IT架构转型的首选。本文深入探讨了云原生架构的核心理念,聚焦于微服务设计的关键原则与实施策略,旨在为开发者提供一套系统性的方法论,以应对复杂多变的业务需求和技术挑战。通过分析真实案例,揭示了如何有效利用容器化、持续集成/持续部署(CI/CD)、服务网格等关键技术,构建高性能、易维护的云原生应用。文章还强调了文化与组织变革在云原生转型过程中的重要性,为企业顺利过渡到云原生时代提供了宝贵的见解。 ##
云原生时代的微服务架构设计原则与实践
【9月更文挑战第27天】本文深入探讨了在云原生环境下,如何高效地实施微服务架构。通过分析微服务的基本概念、设计原则和关键技术,结合实际案例,指导读者理解并应用微服务架构于云计算项目之中。文章旨在为软件开发者和架构师提供一条清晰的路径,以实现更加灵活、可扩展且易于维护的系统。
云原生时代的微服务架构设计原则
在数字化浪潮中,企业纷纷上云以获得更大的灵活性和扩展性。云原生技术因此成为现代软件开发的核心。本文将深入探讨在云原生环境下如何设计高效、可靠的微服务架构,涵盖关键设计原则、最佳实践以及面临的挑战。我们将通过实际案例分析,揭示如何在云原生生态中构建和维护微服务,确保系统的稳定性和可维护性。
微服务架构设计原则与模式
【8月更文第29天】随着云计算和分布式计算的发展,微服务架构已成为构建大型复杂应用的一种流行方式。这种架构模式将单个应用程序分解成一组小型、独立的服务,每个服务运行在其自己的进程中,并通过轻量级机制(通常是HTTP资源API)进行通信。本文将探讨微服务架构的基本设计原则、常用模式以及如何有效地划分服务边界。
536 3

热门文章

最新文章