Ini adalah posting lama tapi saya akan tetap berpegang pada karena jawaban lain tidak berurusan dengan apa yang terjadi ketika menggunakan kedua pola, mereka tampaknya lebih banyak tentang teori daripada praktik.
Bagaimana Delegasi dan Pengamat Bekerja
Dengan Delegasi, delegator memilih dengan tepat siapa yang akan menanggapi suatu peristiwa tertentu saat sumber peristiwa potensial itu dibuat. Anda bisa menganggap pendengar ini sebagai pengamat tunggal . Dalam kasus pola Observer, pengamat memilih siapa yang diamati kapan pun ia mau; sehingga ketergantungan berubah ketika datang ke pengamat vs delegasi. Dengan pola pengamat, pikirkan koran dan pelanggan sebagai pengamat. Pengamat mengendalikan kapan hubungan itu tercipta. Dengan delegasi pikirkan seorang karyawan dan seorang majikan. Majikan mengendalikan kapan hubungan dibuat dan siapa yang bertanggung jawab atas peristiwa tertentu. Karyawan tidak dapat memilih tugas apa yang sedang mereka kerjakan ... secara umum.
Beberapa delegasi berpendapat dapat memiliki satu pengamat tapi saya pikir perbedaan nyata antara keduanya adalah bagaimana penanganan acara ditugaskan. Anda tidak akan pernah melihat delegasi mendaftar untuk suatu acara. Itu tidak akan pernah tahu bahkan menangani acara sampai itu terjadi dan delegator memanggil metode publik di atasnya.
Keuntungan Delegasi
Pola ini sangat kaku dan dengan sebagian besar desain regid lebih sederhana dan umumnya lebih kuat. Ini memaksa Anda untuk mendeklarasikan handler acara Anda di muka pada saat menginisialisasi sumber acara potensial. Jika Anda membutuhkan seseorang untuk mengarahkan lalu lintas, Anda menugaskan direktur lalu lintas sebelum Anda membuka jalan. Dalam hal pengamat Anda akan membiarkan polisi lalu lintas memilih kapan harus mengarahkan lalu lintas kapan saja dia mau.
Kerugian Delegasi
Kerugian dari desain ini adalah tidak fleksibel. Jika Anda menerapkan beberapa kode untuk berlangganan surat kabar, maka surat kabar / delegator harus mengidentifikasi secara tepat siapa yang dapat membaca cerita-cerita berita begitu mereka dibuat. Dengan pola pengamat, mereka dapat didaftarkan nanti kapan saja dan surat kabar hanya perlu mengetahui bahwa orang baru telah mendaftar.
Kapan Memilih Delegasi?
Ketika Anda membutuhkan satu pengamat tertentu untuk memastikan dan tidak ada alasan bagi Anda untuk mengubah siapa yang mengamati maka desain kaku dari pola pendelegasian akan bermanfaat.
Misalnya, Anda memerlukan kelas / objek untuk menangani pembuatan pop-up untuk kesalahan tertentu. Tidak ada banyak alasan mengapa pada saat run-time Anda perlu beralih siapa yang menangani kesalahan tertentu sehingga mendelegasikan kesalahan "Kehabisan Memori" ke satu entitas akan masuk akal. Membuat susunan penangan potensial dan kemudian meminta penangan tersebut mendaftar untuk kesalahan "Kehabisan Memori" tidak masuk akal; itu akan menjadi contoh penggunaan pola pengamat dalam situasi ini. Pada saat run-time Anda mungkin ingin mengubah metode apa yang dipanggil atau apa "delegasi" dipanggil untuk acara variabel tetapi mengganti penangan event untuk acara tertentu pada saat run-time tidak normal.
Bukan tidak mungkin untuk menukar delegasi seperti yang akan Anda lakukan dalam pola pengamat, itu hanya rumit. Di dunia nyata mungkin Anda ingin menukar polisi lalu lintas sehingga delegator baru menangani lalu lintas. Orang bisa berargumen bahwa desain yang lebih baik akan membuat delegasi asli menjadi kantor polisi dan bukan seorang polisi tetapi saya ngelantur ...