Tinggal di Tokyo, Jepun, saya dikelilingi oleh mesin layan diri yang menawarkan segala-galanya daripada kopi panas kepada minuman sejuk dan makanan ringan. Diilhamkan oleh mesin ikonik ini, saya benar-benar membina reka bentuk sistem mesin layan diri di Go. Ini adalah contoh hebat menggunakan corak Negeri dan saya akan hurai sebab ia sangat berguna untuk projek jenis ini.
Fikirkan tentang mesin layan diri sebenar - ia sebenarnya agak rumit! Ia perlu:
Selain itu, ia perlu melakukan semua ini tanpa keliru tentang keadaannya.
Mula-mula, saya memerlukan beberapa struktur asas untuk digunakan:
Produk dan Inventori
Setiap produk mempunyai ID, nama, harga dan kuantiti. Perkara yang agak mudah:
type Product struct { ID int Name string Price float64 Quantity int }
Inventori menjejaki semua produk menggunakan peta. Ia boleh:
Corak Negeri: Mengapa Ia Hebat Di Sini
Di sinilah ia menjadi menarik. Mesin layan diri boleh berada dalam keadaan berbeza:
Setiap negeri perlu mengendalikan tindakan pengguna secara berbeza. Macam tak boleh pilih produk sebelum masukkan duit kan?
Saya menggunakan tiga keadaan utama:
Setiap negeri melaksanakan antara muka ini:
type State interface { InsertMoney(amount float64) SelectProduct(product *Product) ReturnChange() DispenseProduct() }
Bagaimana Semuanya Berfungsi Bersama
Katakan anda ingin membeli Coke:
Mula-mula, anda masukkan $2.00
Anda pilih Coke ($1.50)
Mesin mengeluarkan Coke anda
Membina ini mengajar saya beberapa perkara:
Sentiasa ada ruang untuk penambahbaikan! Beberapa idea:
Kod penuh lebih terperinci daripada yang saya tunjukkan di sini, tetapi ini adalah bahagian utama yang menjadikannya berfungsi. Sila semak pelaksanaan penuh dalam repo berikut:
Selamat datang ke repositori Reka Bentuk Sistem Tahap Rendah dalam Go! Repositori ini mengandungi pelbagai masalah reka bentuk sistem peringkat rendah dan penyelesaiannya dilaksanakan dalam Go. Matlamat utama adalah untuk menunjukkan reka bentuk dan seni bina sistem melalui contoh praktikal.
Reka bentuk sistem peringkat rendah melibatkan pemahaman konsep teras seni bina sistem dan mereka bentuk sistem berskala, boleh diselenggara dan cekap. Repositori ini akan cuba merangkumi penyelesaian pelbagai masalah dan senario menggunakan Go.
Projek pertama dalam repositori ini ialah Sistem Tempat Letak Kereta. Sistem ini menyerupai tempat letak kereta di mana kenderaan boleh diletakkan dan tidak diletakkan. Ia menunjukkan:
Atas ialah kandungan terperinci Reka bentuk sistem: Membina Mesin Layan Diri dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!