日本の東京に住んでいる私は、ホットコーヒーから冷たい飲み物、軽食まであらゆる自動販売機に囲まれています。これらの象徴的な機械からインスピレーションを得て、Go で自動販売機システムのデザインを構築することにしました。これは State パターンを使用する素晴らしい例であり、この種のプロジェクトにこれが非常に役立つ理由を詳しく説明します。
本物の自動販売機について考えてみましょう - 実際にはかなり複雑です。次のことが必要です:
さらに、どの状態にあるのか混乱することなく、これらすべてを実行する必要があります。
まず、操作するための基本的な構造がいくつか必要でした。
商品と在庫
各商品には ID、名前、価格、数量があります。非常に簡単な内容:
type Product struct { ID int Name string Price float64 Quantity int }
在庫では、地図を使用してすべての製品を追跡します。次のことが可能です:
状態パターン: ここが素晴らしい理由
ここからが興味深いところです。自動販売機はさまざまな状態をとることができます:
各州はユーザーのアクションを異なる方法で処理する必要があります。お金を入れる前に商品を選ぶことはできないですよね?
私は 3 つの主要な状態を使用しました:
各状態は次のインターフェイスを実装します:
type State interface { InsertMoney(amount float64) SelectProduct(product *Product) ReturnChange() DispenseProduct() }
すべてがどのように連携するか
コーラを買いたいとします:
まず、$2.00 を挿入します
あなたはコーラ ($1.50) を選択しました
機械がコーラを分配します
これを構築することでいくつかのことを学びました:
常に改善の余地があります。いくつかのアイデア:
完全なコードはここで示したものよりも詳細ですが、これらはコードを機能させるための主要な部分です。次のリポジトリで完全な実装を自由に確認してください:
Go での低レベル システム設計 リポジトリへようこそ!このリポジトリには、Go で実装されたさまざまな低レベルのシステム設計の問題とその解決策が含まれています。主な目的は、実際の例を通じてシステムの設計とアーキテクチャを実証することです。
低レベルのシステム設計には、システム アーキテクチャの中核概念を理解し、拡張性、保守性、効率性の高いシステムを設計することが含まれます。このリポジトリは、Go を使用したさまざまな問題やシナリオの解決策をカバーしようとします。
このリポジトリの最初のプロジェクトは、駐車場システムです。このシステムは、車両を駐車および駐車解除できる駐車場をシミュレートします。以下を示します:
以上がシステム設計: Go で自動販売機を構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。