Gözlemci Tasarım Kalıbı ve “Dinleyiciler”


137

Bana öyle geliyor ki, GOF'ta açıklanan Gözlemci tasarım modeli, çeşitli araç setlerinde bulunan Dinleyiciler ile gerçekten aynı şeydir. Kavramlar arasında bir fark var mı, yoksa Dinleyiciler ve Gözlemciler gerçekten aynı şey mi?

(Herhangi bir bilgisayar dili uygulaması aramıyorum, sadece tasarım açısından farkı (varsa) anlamak istiyorum. Evet, SOF ile ilgili benzer sorulara birkaç cevap olduğunu biliyorum, ancak köklü belirli dillerle ilgili belirli sorularda - bir dil yanıtı değil, bir tasarım yanıtı arıyorum.)


19
Birincisinde kod diğer kodu hareket için izlerken, ikincisinde bir kod diğer kodu herhangi bir gürültü için dinler.
nate c

2
GOF ne anlama geliyor?
dekaru

Yanıtlar:


60

"Dinleyici" teriminin Gözlemci modelini ifade edip etmemesi bağlama bağlıdır. Örneğin, Java Swing'in "Olay Dinleyicileri" bir Gözlemci kalıp uygulamasının bir parçası iken .Net "İz Dinleyicileri" değildir.

Çerçeve yazarlarının belirli bir kalıp uygulamasına katılan bileşenlere farklı adlar atamaları nadir değildir, ancak resmi kalıp adları genellikle kalıpların kendileri tartışılırken kullanılır.

Tasarım ile ilgili olarak, belirli bir modelin uygulanması sıklıkla kullanılan dil ve platformdan etkilenecektir. Bu nedenle, belirli bir çerçeve içinde (ConcreteObserver'ın rolünü tanımlamak için "dinleyici" terimini kullanabilecek) Gözlemci modelinin belirli bir uygulaması, Tasarım Desenleri kitabında açıklanandan biraz farklı olabilir.


26

Gamma ve ark. Tarafından Gözlemci Tasarımında Gözlemci tanımının iki yönlü bir doğası vardır. ark. (GOF).

Observer açıklamalarında, ConcreteObserver'lardan biri Konusunda bir değişiklik sinyali verebilir. Tüm ConcreteObservers listesini içeren Konu, daha sonra bu listeye bildirir. Ana taşıyıcı da dahil olmak üzere tüm ConcreteObservers uygun şekilde tepki verir.

Dinleyicilerin ortak uygulamaları, dışarıdan gelen olaylara tepki veriyor görünmektedir.

Yani, Dinleyicinin daha az genelleştirilmiş bir Gözlemci vakası olduğunu söyleyebilirim.


4

Bir dinleyici gözlemci modelinin bir uygulaması olabilir. Bir dinleyici esasen belirli bir nesne üzerinde bir olayın gerçekleşmesini bekler;

Dile özgü bir cevabın peşinde olmadığınızı biliyorum, ancak soyutta bu şeyler hakkında konuşmak biraz zor. Bunu .NET'te araştırırsam, .NET Reflector'da bir dinleyici içeren bir montaj açmaya meyilli olurum, bu da montajı sökmeme ve mantığını bir tasarım modeline karşı kontrol etmeme izin verecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.