2016-03-29 14 views
0

Bir mikro denetleyicide CAN arabiriminden kareleri yakalayan bir C++ sınıf A var. A sınıfı, tek tek yakalanan kareleri kullanan başka bir B sınıfı (ve C ve D ..) uygulamaya çalışıyorum. Özünde, A sınıfı, yakalanan çerçeveleri çerçevenin içeriğine bağlı olarak üst katmandan sınıflardan birine yönlendirir. Bir çerçevenin alındığı her seferinde, bir üst sınıftan nesnenin nesnesine bir olay gönderilecek şekilde, bir tür olay yürütme mekanizmasını (bir programlama acentası olmaya çok aşina değilim) uygulamalı mıyım? Ya da bunu B sınıfı C, C, ... sınıfından devralarak başarabilirim. Bazıları bana nasıl iyi ve kolay bir mantık geliştirecek?Farklı sınıflardaki nesneler arasındaki olay yönetimi

Düzenleme: Sınıf A'da anahtar deyim var ve daha sonra bir durum temelinde B, C, D, .... sınıflarından biri olarak adlandırılan işlem yöntemini çağırmak için çok iyi bir yol değil değer. Ancak, bu akıllıca bir yol değil çünkü A sınıfı artık istemediğim B, C, D ... vb. Sınıfları kullanıyor. A Sınıfı, B, C, D, .....

+0

Muhtemelen bir "iş/süreç" işlevi bildiren her bir işlemci için ortak bir arabirim (temel sınıf) tanımlardım. Hepsini bir kapta saklarım. Çerçeveyi almak ve liste denetleyicilerinin her birine iletmek için A sınıfını kullanacak bir "denetleyici" sınıfı olurdu. Şimdi, sipariş verenin önemli olup olmadığına bağlı olarak, kontrolörlerin listesini oluşturmak size kalmış ... –

+0

Bir düzenleme yaptım. Tekrar bir göz atabilir misin? – Paindoo

+0

Anladım, yani B, C veya D sınıflarının yalnızca bir tanesinin çerçeveyi işleyebileceğini kastediyorsunuz. Hangisi alan değerlerinden biriyle biliyorsun. Bu, fabrika tasarım deseninin çok yaygın bir kullanımı olup, google'da görünür. Eğer hangisi olduğunu bilmiyorsanız, o zaman daha az yaygın olan sorumluluk kalıbı zincirini kullanabilirsiniz, ama isterseniz bunun için biraz sahte kod yazabilirim. –

cevap

0

sınıfları hakkında bilmemelidir: A sınıfı std::list<B*> içerir, burada B virtual eylemci yöntemine sahip bir temel sınıftır. Çeşitli sınıflar (C, D, E) B sınıfını devralır ve bu yöntemi aşırı yükler. Daha sonra, A türünde bir işaretçi ile listelemek için türetilmiş sınıfların örneklerini eklersiniz (örneğin: std::list<B*> workers {new C, new D, new E};) ve her bir örnek için aşırı yükleme yöntemini çağırın. Mevcut sınıfları kabul edip kendi yöntemleriyle işlerse her sınıf kendi başına karar verir.

0

Observer design pattern'a bakabilirsiniz. Temel olarak, gözlemlenebilir bir sınıfa (sizin durumunuzda class A) ve birden fazla gözlemciniz olabilir (sizin durumunuzda class Bclass C vb.). Gözlemciler kendilerini olay bildirimi için gözlemlenebilir sınıfa kaydedeceklerdir. Nesneler arasında Qt stili bağlantılara izin veren EventInterface Model örnek kodum var. Tüm uygulamanın yapması gereken, gözlemlenebilir nesnenin olayını gözlemci nesnesi olay işleyicisi ile birleştirmektir.

İlgili konular