住在日本东京,我周围都是自动售货机,提供从热咖啡到冷饮和零食的各种商品。受到这些标志性机器的启发,我决定用 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中文网其他相关文章!