SOLID 原则使用一些有趣的类比与车辆示例

SOLID 原则使用一些有趣的类比与车辆示例

solid 是计算机编程中五个良好原则(规则)的缩写。 solid 允许程序员编写更易于理解和稍后更改的代码。 solid 通常与使用面向对象设计的系统一起使用。
让我们使用车辆示例来解释 solid 原理。想象一下,我们正在设计一个系统来管理不同类型的车辆,例如汽车和电动汽车,以提供运输服务。

s - 单一职责原则(srp)

车辆示例:想象你有一辆汽车。它负责驾驶,但不应该负责处理自己的维护(例如换油或轮胎旋转)。相反,由一名单独的机械师负责。
说明:在我们的代码中,vehicle 类应该只处理与车辆本身相关的事情,比如存储其品牌和型号。如果我们需要管理维护,我们会为此创建一个单独的维护类。这样,每个类都有一个工作或职责,使代码更易于管理。

class vehicle  def initialize(make, model)    @make = make    @model = model  endendclass maintenance  def initialize(vehicle)    @vehicle = vehicle  end  def perform_maintenance    puts "performing maintenance on #{@vehicle.make} #{@vehicle.model}"  endend

登录后复制

o - 开/闭原理(ocp)

车辆示例:假设您有一辆基本型汽车,现在您想在系统中添加一辆电动汽车。您不必修改现有的汽车类别即可添加电动汽车的功能。相反,您可以通过创建新的电动汽车类来扩展现有功能。
说明:vehicle类是开放扩展的(你可以创建新类型的车辆,如electricvehicle),但它是封闭修改的(你不需要更改vehicle类本身来添加新类型)。

class vehicle  def initialize(make, model)    @make = make    @model = model  end  def description    "#{@make} #{@model}"  endendclass electricvehicle < vehicle  def initialize(make, model, battery_range)    super(make, model)    @battery_range = battery_range  end  def description    "#{super} with #{@battery_range} miles battery range"  endend

登录后复制

l - 里氏替换原理 (lsp)

车辆示例:假设您有一支车队,并且您可以毫无问题地用电动汽车替换任何普通汽车。两者都应该能够在不破坏系统的情况下执行其基本功能 - 驾驶 - 。
说明:任何子类(如 electricvehicle)都应该能够替换其父类(vehicle),而不改变程序的行为。这确保我们的代码可以以相同的方式处理不同类型的车辆。

class vehicle  def initialize(make, model)    @make = make    @model = model  end  def drive    puts "driving the #{@make} #{@model}"  endendclass electricvehicle < vehicle  def drive    puts "driving the electric #{@make} #{@model} quietly"  endenddef test_drive(vehicle)  vehicle.driveendcar = vehicle.new("toyota", "corolla")ev = electricvehicle.new("tesla", "model 3")test_drive(car)  # driving the toyota corollatest_drive(ev)   # driving the electric tesla model 3 quietly

登录后复制

i - 接口隔离原则(isp)

车辆示例:想象一下您有不同类型的车辆:有些可以充电(如电动汽车),有些只能驾驶(如汽油车)。你不希望汽油车必须处理充电相关的方法。
说明:类应该只实现它们需要的接口(或行为)。例如,电动车辆可能同时实现可驾驶和可充电接口,而普通车辆仅实现可驾驶。

module drivable  def drive    raise notimplementederror, "this #{self.class} cannot drive"  endendmodule chargeable  def charge    raise notimplementederror, "this #{self.class} cannot be charged"  endendclass vehicle  include drivable  def initialize(make, model)    @make = make    @model = model  end  def drive    puts "driving the #{@make} #{@model}"  endendclass electricvehicle < vehicle  include chargeable  def initialize(make, model, battery_range)    super(make, model)    @battery_range = battery_range  end  def drive    puts "driving the electric #{@make} #{@model} quietly"  end  def charge    puts "charging the #{@make} #{@model}"  endend

登录后复制

d - 依赖倒置原理(dip)

车辆示例:想象一辆汽车可以有不同类型的发动机:燃气发动机或电动发动机。汽车不应该直接依赖于特定的引擎类型,而应该依赖于更通用的引擎接口,这样它就可以使用任何类型的引擎。
说明:高级模块(如车辆)不应依赖于低级模块(如 gasengine 或 electricengine)。两者都应该依赖于抽象(如引擎接口)。这使得系统更加灵活并且更容易更改。

class Engine  def start    raise NotImplementedError, "This #{self.class} cannot start"  endendclass GasEngine < Engine  def start    puts "Starting gas engine"  endendclass ElectricEngine < Engine  def start    puts "Starting electric engine"  endendclass Vehicle  def initialize(engine)    @engine = engine  end  def start    @engine.start  endendgas_engine = GasEngine.newelectric_engine = ElectricEngine.newgas_car = Vehicle.new(gas_engine)electric_car = Vehicle.new(electric_engine)gas_car.start        # Starting gas engineelectric_car.start   # Starting electric engine

登录后复制

通过遵循此车辆示例中的 solid 原则,我们可以构建一个易于维护、扩展和适应新需求的系统。

领英:https://www.linkedin.com/in/anandsoni11/

以上就是SOLID 原则使用一些有趣的类比与车辆示例的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2670466.html

(0)
上一篇 2025年3月7日 12:58:11
下一篇 2025年2月25日 20:40:54

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 如何在Nextjs中添加RBAC授权

    基于角色的访问控制 (rbac) 是现代 web 应用程序中的一项重要功能,使管理员能够根据用户在系统中的角色来管理用户权限。在 next.js 应用程序中实现 rbac 涉及几个关键步骤:定义角色和权限、将其与身份验证集成以及在应用程序中…

    2025年3月7日
    200
  • React 中的 SOLID 原则:编写可维护组件的关键

    随着 react 应用程序的增长,事情可能会很快变得混乱——臃肿的组件、难以维护的代码和意外的错误。这就是 solid 原则派上用场的地方。这些原则最初是为面向对象编程而开发的,可帮助您编写干净、灵活且可扩展的代码。在本文中,我将分解每个 …

    2025年3月7日
    200
  • 里氏替换原理(LSP)的缺点

    里氏替换原理(LSP)的缺点 LSP(里氏替换原理)有一些局限性,其中包括: 严格合规性:编写遵守 LSP 的代码有时会在创建子类或派生类时引入额外的复杂性,因为它需要维护父类的所有属性。 缺乏灵活性:遵循LSP在某些情况下会降低灵活性,因…

    2025年3月7日
    200
  • node.js如何学

    学习 Node.js 的入门步骤:熟悉 JavaScript 语言安装 Node.js创建 Node.js 文件并打印信息导入模块理解事件和回调进行 HTTP 请求进行数据库操作操作文件系统使用命令行界面部署和测试应用程序 如何学习 Nod…

    2025年3月7日
    200
  • js如何制作table

    在 JavaScript 中,创建表格需要:1. 创建 元素;2. 使用 和 创建表头;3. 使用 和 创建表体;4. 使用 创建单元格;5. 设置边框和间距。 如何在 JavaScript 中创建表格 在 JavaScript 中,可以通…

    2025年3月7日
    200
  • 在 JavaScript 和 TypeScript 框架中应用 SOLID 原则

    简介 solid 原则构成了干净、可扩展和可维护的软件开发的基础。尽管这些原则起源于面向对象编程 (oop),但它们可以有效地应用于 javascript (js) 和 typescript (ts) 框架,例如 react 和 angul…

    2025年3月7日
    200
  • typescript学习基础

    TypeScript 是一种由 Microsoft 开发的编程语言,它扩展了 JavaScript,添加了类型系统和面向对象的特性。它有助于防止错误,提高代码维护性和开发效率。基本概念包括数据类型、类型注释和面向对象。建议的学习步骤为:理解…

    2025年3月7日
    200
  • typescript小白入门教程

    TypeScript 是一种扩展 JavaScript 的语言,增加了类型检查和面向对象编程特性,提升了代码可靠性和可维护性。入门教程包括:安装 TypeScript,创建项目,编写代码,编译,运行。基础语法涉及类型注释、接口和类。优点包括…

    2025年3月7日
    200
  • js如何转dll

    将 JS 代码转换为 DLL 可扩展 JS 功能并提高代码可移植性。两种转换方法是:使用 Emscripten:将 JS 编译为 WebAssembly (WASM),将其链接到 C/C++ 库,然后编译 DLL。使用 Node.js:编写…

    2025年3月7日
    200
  • 如何使用 Vue3 + Element Plus 渲染包含二级分类的行列动态 Excel 表格?

    如何在 vue3 + element plus 中实现行列均为动态数据的 excel 表格渲染,并且包含二级分类? 针对以下场景: 需要在 vue3 + element plus 项目中创建 excel 表格,其中行列均为动态数据,且包含二…

    2025年3月7日
    100

发表回复

登录后才能评论