Sorununuzu çözmek için birçok geçerli yaklaşım var. Basile Starynkevitch, sizi basit bir ara yüzle bırakan ve uygun şekilde ara yüz kullanarak programcıya güvenen bir “sıfır bürokrasi” yaklaşımı önerdi. Bu yaklaşımı sevmeme rağmen, daha fazla hareketli olan ancak derleyicinin bazı hataları yakalamasını sağlayan başka bir tane daha sunacağım.
Cihazınız olarak, olabilir, çeşitli durumları belirleyin Uninitialised
,
Started
, Configured
vb. Liste sonlu olmalı.
Her eyalet için, struct
bu durumla ilgili gerekli ek bilgileri, örneğin DeviceUninitialised
,
DeviceStarted
vs.
Tüm tedavileri, DeviceStrategy
yöntemlerde girdi ve çıktı olarak tanımlanan 2. yapıların kullanıldığı tek bir nesnede paketleyin . Bu nedenle, bir DeviceStarted DeviceStrategy::start (DeviceUninitalised dev)
yönteminiz olabilir (veya eşdeğeriniz ne olursa olsun proje sözleşmelerinize göre olabilir).
Bu yaklaşımla, geçerli bir program, yöntem prototipleri tarafından uygulanan dizideki bazı yöntemleri çağırmalıdır.
Çeşitli durumlar alakasız nesnelerdir, bu ikame prensibinden dolayıdır. Bu yapıların ortak bir atayı paylaşması sizin için yararlısa, ziyaretçi modelinin soyut bir sınıf örneğinin somut türünü kurtarmak için kullanılabileceğini hatırlayın.
Eşsiz bir DeviceStrategy
sınıfta 3. tanımladığım halde, sağladığı işlevselliği birkaç sınıfa bölmek isteyebileceğiniz durumlar vardır.
Bunları özetlemek için, tarif ettiğim tasarımın kilit noktaları:
İkame prensibi nedeniyle, aygıt devletlerini temsil eden nesneler farklı olmalı ve özel miras ilişkilerine sahip olmamalıdır.
Aygıt tedavilerini aygıtların kendisini temsil eden nesneler yerine başlangıç nesnelerine paketleyin, böylece her aygıt veya aygıt durumu yalnızca kendisini görür ve strateji hepsini görür ve aralarındaki olası geçişleri ifade eder.
Bu satırları izleyen bir telnet istemcisi uygulamasının bir tanımını gördüğüme yemin ederim, ancak bir daha bulamadım. Çok faydalı bir referans olurdu!
¹: Bunun için sezginizi takip edin veya “yöntem” yöntemi ilişkisine ilişkin gerçek uygulamanızda eşdeğerlik sınıflarını bulun. Onları aynı nesnede kullanmak geçerlidir ”- cihazınızdaki tüm tedavileri içine alan büyük bir nesneniz olduğunu varsayalım. Her iki devlet de listeleme yöntemi harika sonuçlar verir.
discovery
ya dahandshake
?