Mediator Desain Pola
Oleh
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).
Category
Komentar