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.)
design-patterns
language-agnostic
listener
observer-pattern
JohnnyLambada
sumber
sumber
Jawaban:
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.
sumber
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.
sumber
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.
sumber