目錄
目錄
概述
停車場系統
功能
首頁 後端開發 Golang 系統設計:用 Go 建造自動販賣機

系統設計:用 Go 建造自動販賣機

Nov 05, 2024 am 08:45 AM

住在日本東京,我周圍都是自動販賣機,提供從熱咖啡到冷飲和零食的各種商品。受到這些標誌性機器的啟發,我決定用 Go 建造一個自動販賣機系統設計。這是使用狀態模式的一個很酷的範例,我將詳細解釋為什麼它對於此類專案非常有用。

為什麼要使用自動販賣機?

想像一下真正的自動販賣機 - 它實際上非常複雜!它需要:

  • 追蹤產品及其數量
  • 處理金錢
  • 確保您已存入足夠的現金
  • 給你零食
  • 退零錢

另外,它需要在完成所有這些操作時不對其所處的狀態感到困惑。


基本建置模組

首先,我需要一些基本結構來使用:

產品與庫存
每個產品都有 ID、名稱、價格和數量。很簡單的東西:

type Product struct {
    ID       int
    Name     string
    Price    float64
    Quantity int
}
登入後複製

庫存使用地圖追蹤所有產品。它可以:

  • 新增產品
  • 刪除產品
  • 處理交易(例如有人買東西時)
  • 檢查產品是否有庫存

狀態模式:為什麼它在這裡很棒

這就是有趣的地方。自動販賣機可以處於不同的狀態:

  • 等錢
  • 投入金錢
  • 已選擇產品
  • 分配產品

每個狀態都需要以不同的方式處理使用者操作。就像,你不能在投入資金之前就選擇產品,對吧?
我使用了三個主要狀態:

  1. MoneyInsertedState
  2. ProductSelectedState
  3. ProductDispensedState

每個狀態都實作這個介面:

type State interface {
    InsertMoney(amount float64)
    SelectProduct(product *Product)
    ReturnChange()
    DispenseProduct()
}
登入後複製

如何協同工作

假設您想買可樂:

首先,您插入 2.00 美元

  • 機器處於MoneyInsertedState
  • 它記錄了你的錢
  • 切換到 ProductSelectedState

您選擇可樂($1.50)

  • 機器檢查是否有可樂庫存
  • 驗證您投入了足夠的資金
  • 轉到 ProductDispensedState

機器分配你的可樂

  • 更新庫存
  • 退還您的 0.50 美元零錢
  • 返回 MoneyInsertedState

我添加的很酷的功能

  • 庫存管理:每個產品從 3 件開始。當某樣東西售完時,它會自動從可用選項中刪除。
  • 智慧找零處理:機器總是在購買後計算並回傳正確的零錢。
  • 錯誤預防:狀態模式有助於防止奇怪的情況,例如,嘗試在沒有足夠錢的情況下購買東西,選擇缺貨的產品,在分發東西時插入錢。

我學到了什麼

建構這教會了我一些事:

  • 狀態模式非常適合具有清晰、獨特狀態的機器
  • Go 的介面讓狀態模式的實作變得非常乾淨
  • 正確的錯誤處理對於現實世界的應用程式非常重要

接下來是什麼?

總是有進步的空間!一些想法:

  • 新增卡支付支援
  • 實作顯示系統
  • 添加飲料溫度監控
  • 建立用於補貨的管理介面

完整的程式碼比我在這裡展示的更詳細,但這些是使其工作的主要部分。請隨意檢查以下儲存庫中的完整實作:

System design: Building a Vending Machine in Go 主題樹 / 低級設計 golang

Golang 中的底層系統設計問題解決方案

System design: Building a Vending Machine in Go

Go 中的底層系統設計

歡迎來到Go 中的低階系統設計 儲存庫!此儲存庫包含各種低階系統設計問題及其在 Go 中實現的解決方案。主要目的是透過實際範例展示系統的設計和架構。

目錄

  • 概述
  • 停車場系統
  • 電梯系統
  • 圖書館管理系統
  • 自動販賣機系統

概述

底層系統設計涉及理解系統架構的核心概念以及設計可擴展、可維護和高效的系統。該存儲庫將嘗試涵蓋使用 Go 的各種問題和場景的解決方案。

停車場系統

此儲存庫中的第一個項目是停車場系統。該系統模擬一個可以停放車輛和出庫車輛的停車場。它示範了:

  • 用於管理停車場實例的單例設計模式。
  • 處理不同類型的車輛(例如汽車、卡車)。
  • 多個樓層的停車位管理。
  • 停放車輛的付款處理。

功能

在 GitHub 上查看

以上是系統設計:用 Go 建造自動販賣機的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1655
14
CakePHP 教程
1414
52
Laravel 教程
1307
25
PHP教程
1253
29
C# 教程
1227
24
Golang的目的:建立高效且可擴展的系統 Golang的目的:建立高效且可擴展的系統 Apr 09, 2025 pm 05:17 PM

Go語言在構建高效且可擴展的系統中表現出色,其優勢包括:1.高性能:編譯成機器碼,運行速度快;2.並發編程:通過goroutines和channels簡化多任務處理;3.簡潔性:語法簡潔,降低學習和維護成本;4.跨平台:支持跨平台編譯,方便部署。

Golang和C:並發與原始速度 Golang和C:並發與原始速度 Apr 21, 2025 am 12:16 AM

Golang在並發性上優於C ,而C 在原始速度上優於Golang。 1)Golang通過goroutine和channel實現高效並發,適合處理大量並發任務。 2)C 通過編譯器優化和標準庫,提供接近硬件的高性能,適合需要極致優化的應用。

Golang vs. Python:主要差異和相似之處 Golang vs. Python:主要差異和相似之處 Apr 17, 2025 am 12:15 AM

Golang和Python各有优势:Golang适合高性能和并发编程,Python适用于数据科学和Web开发。Golang以其并发模型和高效性能著称,Python则以简洁语法和丰富库生态系统著称。

Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

表演競賽:Golang vs.C 表演競賽:Golang vs.C Apr 16, 2025 am 12:07 AM

Golang和C 在性能競賽中的表現各有優勢:1)Golang適合高並發和快速開發,2)C 提供更高性能和細粒度控制。選擇應基於項目需求和團隊技術棧。

Golang的影響:速度,效率和簡單性 Golang的影響:速度,效率和簡單性 Apr 14, 2025 am 12:11 AM

goimpactsdevelopmentpositationality throughspeed,效率和模擬性。 1)速度:gocompilesquicklyandrunseff,IdealforlargeProjects.2)效率:效率:ITScomprehenSevestAndardArdardArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdEcceSteral Depentencies,增強的Depleflovelmentimency.3)簡單性。

C和Golang:表演至關重要時 C和Golang:表演至關重要時 Apr 13, 2025 am 12:11 AM

C 更適合需要直接控制硬件資源和高性能優化的場景,而Golang更適合需要快速開發和高並發處理的場景。 1.C 的優勢在於其接近硬件的特性和高度的優化能力,適合遊戲開發等高性能需求。 2.Golang的優勢在於其簡潔的語法和天然的並發支持,適合高並發服務開發。

Golang和C:性能的權衡 Golang和C:性能的權衡 Apr 17, 2025 am 12:18 AM

Golang和C 在性能上的差異主要體現在內存管理、編譯優化和運行時效率等方面。 1)Golang的垃圾回收機制方便但可能影響性能,2)C 的手動內存管理和編譯器優化在遞歸計算中表現更為高效。

See all articles