首頁  >  文章  >  web前端  >  SOLID 原則使用一些有趣的類比與車輛範例

SOLID 原則使用一些有趣的類比與車輛範例

WBOY
WBOY原創
2024-08-22 18:33:481096瀏覽

SOLID principles using some fun analogies with Vehicle Example

SOLID 是電腦程式設計中五個良好原則(規則)的縮寫。 SOLID 允許程式設計師編寫更易於理解和稍後更改的程式碼。 SOLID 通常與使用物件導向設計的系統一起使用。
讓我們使用車輛範例來解釋 SOLID 原理。想像一下,我們正在設計一個系統來管理不同類型的車輛,例如汽車和電動車,以提供運輸服務。

S - 單一職責原則(SRP)

車輛範例:假設您有一輛汽車。它負責駕駛,但不應該負責處理自己的維護(例如換油或輪胎旋轉)。相反,由單獨的機械師負責。
說明:在我們的程式碼中,Vehicle 類別應該只處理與車輛本身相關的事情,例如儲存其品牌和型號。如果我們需要管理維護,我們會為此建立一個單獨的維護類別。這樣,每個類別都有一份工作或職責,使程式碼更易於管理。

class Vehicle
  def initialize(make, model)
    @make = make
    @model = model
  end
end

class Maintenance
  def initialize(vehicle)
    @vehicle = vehicle
  end

  def perform_maintenance
    puts "Performing maintenance on #{@vehicle.make} #{@vehicle.model}"
  end
end

O - 開/閉原理(OCP)

車輛範例:假設您有一輛基本型汽車,現在您想在系統中增加一輛電動車。您不必修改現有的汽車類別即可添加電動車的功能。相反,您可以透過為電動車創建新類別來擴展現有功能。
說明:Vehicle類別對擴展開放(您可以創建新類型的車輛,例如ElectricVehicle),但對修改封閉(您不需要更改Vehicle類別本身來添加新類型)。

class Vehicle
  def initialize(make, model)
    @make = make
    @model = model
  end

  def description
    "#{@make} #{@model}"
  end
end

class 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"
  end
end

L - 里氏替換原理 (LSP)

車輛範例:假設您有一支車隊,並且您可以毫無問題地用電動車替換任何普通汽車。兩者都應該能夠在不破壞系統的情況下執行其基本功能 - 駕駛 - 。
說明:任何子類別(如 ElectricVehicle)都應該能夠取代其父類別(Vehicle),而不會改變程式的行為。這確保我們的程式碼可以以相同的方式處理不同類型的車輛。

class Vehicle
  def initialize(make, model)
    @make = make
    @model = model
  end

  def drive
    puts "Driving the #{@make} #{@model}"
  end
end

class ElectricVehicle < Vehicle
  def drive
    puts "Driving the electric #{@make} #{@model} quietly"
  end
end

def test_drive(vehicle)
  vehicle.drive
end

car = Vehicle.new("Toyota", "Corolla")
ev = ElectricVehicle.new("Tesla", "Model 3")

test_drive(car)  # Driving the Toyota Corolla
test_drive(ev)   # Driving the electric Tesla Model 3 quietly

I - 介面隔離原則(ISP)

車輛範例:想像一下您有不同類型的車輛:有些可以充電(如電動車),有些只能駕駛(如汽油車)。您不希望汽油車必須處理與充電相關的方法。
解釋:類別應該只實作它們需要的介面(或行為)。例如,電動車輛可能同時實現可駕駛和可充電接口,而普通車輛僅實現可駕駛。

module Drivable
  def drive
    raise NotImplementedError, "This #{self.class} cannot drive"
  end
end

module Chargeable
  def charge
    raise NotImplementedError, "This #{self.class} cannot be charged"
  end
end

class Vehicle
  include Drivable

  def initialize(make, model)
    @make = make
    @model = model
  end

  def drive
    puts "Driving the #{@make} #{@model}"
  end
end

class 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}"
  end
end

D - 依賴倒置原理(DIP)

車輛範例:想像一輛汽車可以有不同類型的引擎:燃氣引擎或電動引擎。汽車不應該直接依賴特定的引擎類型,而應該依賴更通用的引擎接口,這樣它就可以使用任何類型的引擎。
說明:高階模組(如車輛)不應依賴低階模組(如 GasEngine 或 ElectricEngine)。兩者都應該依賴抽象(如引擎介面)。這使得系統更加靈活並且更容易更改。

class Engine
  def start
    raise NotImplementedError, "This #{self.class} cannot start"
  end
end

class GasEngine < Engine
  def start
    puts "Starting gas engine"
  end
end

class ElectricEngine < Engine
  def start
    puts "Starting electric engine"
  end
end

class Vehicle
  def initialize(engine)
    @engine = engine
  end

  def start
    @engine.start
  end
end

gas_engine = GasEngine.new
electric_engine = ElectricEngine.new

gas_car = Vehicle.new(gas_engine)
electric_car = Vehicle.new(electric_engine)

gas_car.start        # Starting gas engine
electric_car.start   # Starting electric engine

透過遵循此車輛範例中的 SOLID 原則,我們可以建立一個易於維護、擴展和適應新需求的系統。

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

以上是SOLID 原則使用一些有趣的類比與車輛範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn