首页 > 其他分享 >SOLID 原则使用一些有趣的类比与车辆示例

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

时间:2024-09-21 15:50:54浏览次数:11  
标签:类比 SOLID make 示例 车辆 vehicle model def

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 <hr><h2> l?-?里氏替换原理 (<a style="color:#f60; text-decoration:underline;" href="https://www.php.cn/zt/79544.html" target="_blank">lsp</a>)</h2><p><strong>车辆示例</strong>:假设您有一支车队,并且您可以毫无问题地用电动汽车替换任何普通汽车。两者都应该能够在不破坏系统的情况下执行其基本功能?-?驾驶?-?。<br><strong>说明</strong>:任何子类(如 electricvehicle)都应该能够替换其父类(vehicle),而不改变程序的行为。这确保我们的代码可以以相同的方式处理不同类型的车辆。<br></p><pre class="brush:php;toolbar:false">class vehicle def initialize(make, model) @make = make @model = model end def drive puts "driving the #{@make} #{@model}" endendclass electricvehicle <hr><h2> i?-?接口隔离原则(isp)</h2><p><strong>车辆示例</strong>:想象一下您有不同类型的车辆:有些可以充电(如电动汽车),有些只能驾驶(如汽油车)。你不希望汽油车必须处理充电相关的方法。<br><strong>说明</strong>:类应该只实现它们需要的接口(或行为)。例如,电动车辆可能同时实现可驾驶和可充电接口,而普通车辆仅实现可驾驶。<br></p><pre class="brush:php;toolbar:false">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 <hr><h2> d?-?依赖倒置原理(dip)</h2><p><strong>车辆示例</strong>:想象一辆汽车可以有不同类型的发动机:燃气发动机或电动发动机。汽车不应该直接依赖于特定的引擎类型,而应该依赖于更通用的引擎接口,这样它就可以使用任何类型的引擎。<br><strong>说明</strong>:高级模块(如车辆)不应依赖于低级模块(如 gasengine 或 electricengine)。两者都应该依赖于抽象(如引擎接口)。这使得系统更加灵活并且更容易更改。<br></p><pre class="brush:php;toolbar:false">class Engine def start raise NotImplementedError, "This #{self.class} cannot start" endendclass GasEngine <p>通过遵循此车辆示例中的 solid 原则,我们可以构建一个易于维护、扩展和适应新需求的系统。</p><p>领英:https://www.linkedin.com/in/anandsoni11/</p> 登录后复制以上就是SOLID 原则使用一些有趣的类比与车辆示例的详细内容,更多请关注我的其它相关文章!

标签:类比,SOLID,make,示例,车辆,vehicle,model,def
From: https://www.cnblogs.com/aow054/p/18424120

相关文章

  • React 与 React (RC):主要区别和迁移技巧与示例
    react是用于构建用户界面的流行javascript库,随着每个新版本的发布而不断发展。在这篇博文中,我们将探讨react18和即将推出的react19(目前处于候选发布阶段)之间的主要区别,提供新功能示例,并为使用react和vite的开发人员提供迁移技巧。目录简介react19的当前状态与......
  • <<编码>> 第 16 章 存储器组织(1)--比特锁存器 示例电路
    1比特锁存器info::操作说明鼠标单击逻辑输入切换0|1状态就是前面的电平触发的D型锁存器.写入(Write)就是时钟信号primary::在线交互操作链接https://cc.xiaogd.net/?startCircuitLink=https://book.xiaogd.net/code-hlchs-examples/assets/circuit/code-hlc......
  • 英飞凌 PSoC6 评估板 CAPSENSE 触摸滑条应用示例
    PSoC™62withCAPSENSE™evaluationkit开发板(以下简称PSoC6RTT开发板)是英飞凌(Infineon)联合RT-Thread发布一款面向物联网开发者的32位双核MCU开发套件,其默认内置RT-Thread物联网操作系统。本文主要介绍CAPSENSE™技术原理,并通过RT-ThreadStudio快速开......
  • 元学习的简单示例
    代码功能模型结构:SimpleModel是一个简单的两层全连接神经网络。元学习过程:在maml_train函数中,每个任务由支持集和查询集组成。模型先在支持集上进行训练,然后在查询集上进行评估,更新元模型参数。任务生成:通过create_task_data函数生成随机任务数据,用于模拟不同的学习任务......
  • Javascript 中的展开和休息运算符及其示例
    剩余和扩展运算符是javascript中强大的功能,允许您更有效地处理数组、对象和函数参数。它们都使用相同的语法(...),但用途不同。休息操作员(...)剩余运算符用于将所有剩余元素收集到数组中。它通常用在函数参数中来处理可变数量的参数。休息运算符示例:functionsum(......
  • CompletableFuture使用示例
    CompletableFuture是Java8中引入的一个功能强大的类,它实现了Future和CompletionStage两个接口,主要用于异步编程。通过它,开发者可以以一种非阻塞的方式编写异步代码,从而提高程序的响应速度和资源利用率。异步执行:CompletableFuture支持在后台线程中异步执行计算或操作,避免阻塞主线......
  • JavaScript For 循环示例
    标准for循环for(leti=0;i<h2>for...of循环(遍历数组)</h2><preclass="brush:php;toolbar:false">constfruits=['apple','banana','orange'];for(constfruitoffruits){console.log(fruit);登录后复制......
  • Javascript Slice 方法及其示例
    什么是javascript数组切片?array.prototype.slice是一个jsarray方法,用于从现有数组中提取连续的子数组或“切片”。javascript切片可以接受两个参数:切片的开始和结束指示符——两者都是可选的。也可以在没有任何参数的情况下调用它。因此,它具有以下调用签名://slice();slice......
  • GEN 自动生成 GORM 模型结构体文件及使用示例
    后端-GEN自动生成GORM模型结构体文件及使用示例-个人文章-SegmentFault思否背景GEN是一个基于GORM的安全ORM框架,由字节跳动无恒实验室与GORM作者联合研发,主要功能说白了就是帮助生成数据表对应的模型文件和更安全方便地执行SQL。直接使用GORM与GEN工具......
  • JavaScript For 循环示例
     零食故事:假设您有一篮子零食:constsnacks=['apple','banana','chocolate'];现在,您想与您的朋友分享这些零食。但你不是把整个篮子都给他们,而是把每件零食都拿出来,一一递给他们:console.log(...snacks);//output:applebananachocolate...(摊开)操作符就像是把......