Mediator Desain Pola

chmood

   Mendefinisikan suatu objek yang merangkum bagaimana satu set objek berinteraksi. Mediator mempromosikan longgar kopling dengan menjaga objek dari merujuk satu sama lain secara eksplisit, dan itu memungkinkan Anda bervariasi interaksi mereka secara mandiri.
Desain perantara untuk memisahkan banyak rekan-rekan.
Mempromosikan banyak-ke-banyak hubungan antara berinteraksi rekan-rekan untuk "penuh Status objek".

   Kami ingin merancang komponen dapat digunakan kembali, tetapi dependensi antara potongan-potongan berpotensi dapat digunakan kembali menunjukkan "kode spageti" fenomena (mencoba untuk meraup hasil porsi tunggal dalam "semua atau tidak rumpun").


   Dalam Unix, izin untuk akses sumber daya sistem dikelola di tiga tingkat granularity: dunia, kelompok, dan pemilik. Kelompok A adalah kumpulan pengguna dimaksudkan untuk model beberapa afiliasi fungsional. Setiap pengguna pada sistem dapat menjadi anggota dari satu atau lebih kelompok, dan setiap kelompok dapat memiliki nol atau lebih pengguna ditugaskan untuk itu. Gambar berikut menunjukkan tiga pengguna yang ditugaskan untuk ketiga kelompok.

   Jika kita untuk model ini dalam perangkat lunak, kita bisa memutuskan untuk memiliki objek Pengguna digabungkan ke objek Group, dan benda-benda Grup digabungkan ke objek Pengguna. Kemudian ketika perubahan terjadi, baik kelas dan semua contoh mereka akan terpengaruh.

   Pendekatan alternatif akan memperkenalkan "tingkat tambahan tipuan" - mengambil pemetaan pengguna untuk kelompok dan kelompok untuk pengguna, dan menjadikannya sebuah abstraksi tersendiri. Ini menawarkan beberapa keuntungan: Pengguna dan Grup yang dipisahkan dari satu sama lain, banyak pemetaan dapat dengan mudah dipertahankan dan dimanipulasi secara bersamaan, dan abstraksi pemetaan dapat diperpanjang di masa depan dengan mendefinisikan kelas turunan.

   Partisi sistem ke banyak objek umumnya meningkatkan usabilitas, tetapi berkembang biak interkoneksi antara benda-benda cenderung mengurangi lagi. Mediator objek: merangkum semua interkoneksi, bertindak sebagai hub komunikasi, bertanggung jawab untuk mengendalikan dan mengkoordinasikan interaksi klien, dan mempromosikan kopling longgar dengan menjaga objek dari merujuk satu sama lain secara eksplisit.

   Pola Mediator mempromosikan "banyak-ke-banyak hubungan jaringan" untuk "penuh Status objek". Pemodelan antar-hubungan dengan obyek meningkatkan enkapsulasi, dan memungkinkan perilaku orang-orang antar-hubungan yang akan diubah atau diperpanjang melalui subclassing.

   Contoh di mana Mediator berguna adalah desain dari pengguna dan kelompok kemampuan dalam sebuah sistem operasi. Kelompok A dapat memiliki nol atau lebih pengguna, dan, pengguna dapat menjadi anggota nol atau lebih kelompok. Pola Mediator menyediakan cara yang fleksibel dan non-invasif untuk mengasosiasikan dan mengelola pengguna dan kelompok.

Struktur

   Rekan (atau rekan-rekan) tidak digabungkan satu sama lain. Setiap pembicaraan dengan Mediator, yang pada gilirannya tahu dan melakukan orkestrasi yang lain. "Banyak ke banyak" pemetaan antara rekan yang lain akan ada, telah "dipromosikan status objek penuh". Abstraksi baru ini memberikan lokus tipuan mana pengaruh tambahan dapat host.

Contoh
   Mediator mendefinisikan sebuah objek yang mengontrol bagaimana satu set objek berinteraksi. Kopling longgar antara objek rekan dicapai dengan memiliki rekan berkomunikasi dengan Mediator, bukan dengan satu sama lain. Menara kontrol di bandara dikendalikan menunjukkan pola ini sangat baik. Pilot dari pesawat mendekati atau berangkat area terminal berkomunikasi dengan menara daripada eksplisit berkomunikasi dengan satu sama lain. Kendala pada yang bisa lepas landas atau tanah yang diberlakukan oleh menara. Hal ini penting untuk dicatat bahwa menara tidak mengontrol seluruh penerbangan. Ini ada hanya untuk menegakkan kendala di daerah terminal.


   Mengidentifikasi koleksi berinteraksi benda yang akan mendapat manfaat dari saling decoupling.
Merangkum mereka interaksi dalam abstraksi dari kelas baru.
Membuat sebuah instance dari kelas baru dan ulang semua "peer" objek untuk berinteraksi dengan Mediator saja.
Menyeimbangkan prinsip decoupling dengan prinsip tanggung jawab mendistribusikan secara merata.
Hati-hati untuk tidak membuat "controller" atau "tuhan" objek.

   Rantai Tanggung Jawab, Command, Mediator, dan Observer, membahas bagaimana Anda dapat memisahkan pengirim dan penerima, tetapi dengan berbeda trade-off. Rantai Tanggung Jawab melewati permintaan pengirim sepanjang rantai penerima potensial. Perintah biasanya menentukan koneksi pengirim-penerima dengan subclass. Mediator memiliki pengirim dan penerima referensi satu sama lain secara tidak langsung. Pengamat mendefinisikan antarmuka yang sangat dipisahkan yang memungkinkan untuk beberapa penerima yang akan dikonfigurasi pada saat run-time.
Mediator dan Observer bersaing pola. Perbedaan antara mereka adalah Observer yang mendistribusikan komunikasi dengan memperkenalkan "pengamat" dan "subjek" objek, sedangkan objek Mediator merangkum komunikasi antara objek lainnya. Kami telah menemukan lebih mudah untuk membuat pengamat dapat digunakan kembali dan Subyek daripada membuat mediator dapat digunakan kembali.

   Di sisi lain, Mediator dapat memanfaatkan Observer untuk secara dinamis mendaftar rekan-rekan dan berkomunikasi dengan mereka.

   Mediator mirip dengan façade dalam hal abstrak fungsi kelas yang ada. Mediator abstrak / memusatkan komunikasi sewenang-wenang antara objek rekan, secara rutin "menambah nilai", dan dikenal / direferensikan oleh objek rekan (yaitu mendefinisikan protokol multi). Sebaliknya, Facade mendefinisikan antarmuka sederhana untuk subsistem, itu tidak menambahkan fungsi baru, dan tidak diketahui oleh kelas subsistem (yaitu mendefinisikan protokol searah mana itu membuat permintaan dari kelas subsistem tetapi tidak sebaliknya).





Komentar