住在日本東京,我周圍都是自動販賣機,提供從熱咖啡到冷飲和零食的各種商品。受到這些標誌性機器的啟發,我決定用 Go 建造一個自動販賣機系統設計。這是使用狀態模式的一個很酷的範例,我將詳細解釋為什麼它對於此類專案非常有用。
想像一下真正的自動販賣機 - 它實際上非常複雜!它需要:
另外,它需要在完成所有這些操作時不對其所處的狀態感到困惑。
首先,我需要一些基本結構來使用:
產品與庫存
每個產品都有 ID、名稱、價格和數量。很簡單的東西:
type Product struct { ID int Name string Price float64 Quantity int }
庫存使用地圖追蹤所有產品。它可以:
狀態模式:為什麼它在這裡很棒
這就是有趣的地方。自動販賣機可以處於不同的狀態:
每個狀態都需要以不同的方式處理使用者操作。就像,你不能在投入資金之前就選擇產品,對吧?
我使用了三個主要狀態:
每個狀態都實作這個介面:
type State interface { InsertMoney(amount float64) SelectProduct(product *Product) ReturnChange() DispenseProduct() }
如何協同工作
假設您想買可樂:
首先,您插入 2.00 美元
您選擇可樂($1.50)
機器分配你的可樂
建構這教會了我一些事:
總是有進步的空間!一些想法:
完整的程式碼比我在這裡展示的更詳細,但這些是使其工作的主要部分。請隨意檢查以下儲存庫中的完整實作:
歡迎來到Go 中的低階系統設計 儲存庫!此儲存庫包含各種低階系統設計問題及其在 Go 中實現的解決方案。主要目的是透過實際範例展示系統的設計和架構。
底層系統設計涉及理解系統架構的核心概念以及設計可擴展、可維護和高效的系統。該存儲庫將嘗試涵蓋使用 Go 的各種問題和場景的解決方案。
此儲存庫中的第一個項目是停車場系統。該系統模擬一個可以停放車輛和出庫車輛的停車場。它示範了:
以上是系統設計:用 Go 建造自動販賣機的詳細內容。更多資訊請關注PHP中文網其他相關文章!