Pola Desain Pengamat vs "Pendengar"

142

Menurut saya, pola desain Observer yang dijelaskan di GOF benar-benar sama dengan yang ditemukan Pendengar di berbagai toolkit. Apakah ada perbedaan antara konsep, atau apakah Pendengar dan Pengamat benar-benar sama.

(Saya tidak mencari implementasi bahasa komputer tertentu, saya hanya ingin memahami perbedaannya (jika ada) dari sudut pandang desain. Ya, saya tahu ada beberapa jawaban untuk pertanyaan serupa di SOF, tetapi jawaban itu sudah di-root dalam pertanyaan khusus tentang bahasa tertentu - Saya mencari jawaban desain, bukan jawaban bahasa.)

JohnnyLambada
sumber
19
Dalam kode yang pertama memperhatikan kode lain untuk pergerakan, sedangkan kode yang terakhir mendengarkan kode lain untuk setiap gangguan.
nate c
3
Apa kepanjangan GOF?
dekaru
5
@dekaru Gang Empat: en.wikipedia.org/wiki/Design_Patterns
bitsoflogic

Jawaban:

61

Apakah istilah "pendengar" mengacu pada pola Pengamat atau tidak akan bergantung pada konteksnya. Misalnya, "Event Listeners" Java Swing adalah bagian dari implementasi pola Observer sedangkan .Net "Trace Listeners" tidak.

Tidak jarang penulis kerangka kerja memberikan nama yang berbeda ke komponen yang berpartisipasi dalam implementasi pola tertentu, tetapi nama pola resmi umumnya digunakan saat mendiskusikan pola itu sendiri.

Mengenai desain, penerapan pola tertentu akan sering dipengaruhi oleh bahasa dan platform yang digunakan. Dengan demikian, implementasi tertentu dari pola Observer dalam kerangka tertentu (yang mungkin kebetulan menggunakan istilah "pendengar" untuk menjelaskan peran ConcreteObserver) mungkin sedikit berbeda dari yang dijelaskan dalam buku Pola Desain.

Derek Greer
sumber
Anda menyebutkan bahwa .NET "Trace Listeners" bukan bagian dari pola Observer. Apakah mereka?
Edwin Diaz
1
Saya tidak yakin apakah Anda bertanya apa tujuan mereka atau dari pola mana mereka berasal. .Net trace listener hanyalah sink yang dapat dicolokkan untuk menulis aliran pesan log (misalnya menulis ke konsol, menulis ke file, menulis ke log peristiwa, dll.) Dalam hal pola, sementara keseluruhan fungsionalitas .Net trace menggunakan beberapa pola (Plugin , Iterator), melakukan perulangan pada kumpulan objek yang semuanya sesuai dengan antarmuka yang sama sebenarnya hanyalah polimorfisme plane jane. TraceListeners sendiri tidak peduli dengan perubahan status dalam objek yang diamati, jadi ini bukan pola pengamat.
Derek Greer
Terima kasih atas penjelasannya, hanya itu yang saya butuhkan
Edwin Diaz
* plain jane ... ugh, saya benci kesalahan ketik di tempat-tempat yang tidak dapat Anda edit
Derek Greer
28

Ada sifat dua arah untuk deskripsi Observer in Design Patterns oleh Gamma et. Al. (GoF).

Dalam deskripsi Observer mereka, salah satu ConcreteObserver mungkin menandakan perubahan pada Subjeknya. Subjek, yang menyimpan daftar semua ConcreteObservers, kemudian memberi tahu daftarnya. Semua ConcreteObserver, termasuk penggerak utama, kemudian bereaksi sebagaimana mestinya.

Penerapan umum dari Pendengar tampaknya semua bereaksi terhadap peristiwa dari luar.

Jadi, saya akan mengatakan bahwa Pendengar adalah kasus Pengamat yang kurang umum.

Richard Wеrеzaк
sumber
1
Dalam pola GoF Observer, subjek memberi tahu pengamat tentang perubahan statusnya sendiri. Jadi "State Observer" sebenarnya adalah nama yang lebih deskriptif untuk pola tersebut. Ini juga memungkinkan pengamat, seperti yang Anda jelaskan, untuk bertindak berdasarkan subjek. Jadi meskipun Pendengar tampak kurang umum dalam hal itu, saya pikir mereka juga lebih umum dalam arti bahwa mereka bereaksi terhadap segala jenis peristiwa, tidak hanya perubahan status subjek yang mereka minati.
Piovezan
3

Seorang pendengar mungkin merupakan implementasi dari pola pengamat. Pendengar pada dasarnya menunggu suatu peristiwa terjadi pada objek tertentu, yang dilakukan oleh pengamat.

Saya tahu Anda tidak mencari jawaban khusus bahasa, tetapi agak sulit untuk membicarakan hal ini secara abstrak. Jadi jika saya menyelidiki hal ini di .NET, saya akan cenderung untuk membuka rakitan yang berisi pendengar di .NET Reflector, yang akan memungkinkan saya untuk membongkar rakitan dan memeriksa logikanya terhadap pola desain.

Mike
sumber
"Seorang pendengar pada dasarnya menunggu suatu peristiwa terjadi pada objek tertentu, yang dilakukan oleh pengamat" tidak persis, menurut DP buku pengamat tidak menunggu peristiwa apa pun, tetapi perubahan dalam keadaan subjek, yang kemudian pengamat bisa menanyakan (tarik). Mungkin "State Observer" akan menjadi nama yang lebih tepat untuk polanya.
Piovezan