Temel bir durum makinesinin uygulanmasını içeren bir araba yarışını simüle eden bazı Java kodları aldım. Bu klasik bir bilgisayar bilimi devlet makinesi değil, sadece birden fazla duruma sahip olabilen ve bir dizi hesaplamaya dayanarak durumları arasında geçiş yapabilen bir nesnedir.
Sadece sorunu tanımlamak için, Araba durumu için bazı sabitleri tanımlayan iç içe bir enum sınıfı olan bir Car sınıfım var (OFF, IDLE, DRIVE, REVERSE, vb.). Aynı Araba sınıfı içinde, temel olarak araçların mevcut durumunu açan, bazı hesaplamalar yapan ve daha sonra araçların durumunu değiştiren büyük bir anahtar ifadesinden oluşan bir güncelleme fonksiyonuna sahibim.
Görebildiğim kadarıyla Arabalar devleti sadece kendi sınıfında kullanılıyor.
Benim sorum şu, bu yukarıda açıklanan nitelikte bir devlet makinesinin uygulanmasıyla başa çıkmanın en iyi yolu mu? En bariz çözüm gibi geliyor, ama geçmişte her zaman "anahtar ifadelerin kötü" olduğunu duydum.
Burada görebildiğim temel sorun, daha fazla durum eklediğimizde (gerekli görülürse) switch ifadesinin muhtemelen çok büyük olabileceği ve kodun zor ve bakımı zor olabileceğidir.
Bu soruna daha iyi bir çözüm ne olabilir?
object.state = object.function(object.state);