23 Mode Desain 20: Model Perantara Java
Definisi: Encapsulate serangkaian interaksi objek dengan objek mediator. Mediator membuat setiap objek berinteraksi tanpa tampilan, dengan demikian melonggarkan kopling dan secara independen mengubah interaksi di antara mereka.
Jenis: Pola perilaku
Diagram kelas:
Struktur model perantara
Mode perantara juga disebut mode mediator. Dari diagram kelas, dibagi menjadi 3 bagian:
Abstrak Mediator: Tentukan antarmuka antara objek kelas kolega dan objek mediator, dan digunakan untuk komunikasi antara setiap kelas kolega. Secara umum, ini mencakup satu atau beberapa metode acara abstrak dan diimplementasikan oleh subkelas.
Kelas Implementasi Perantara: Diwarisi dari mediator abstrak dan mengimplementasikan metode peristiwa yang didefinisikan dalam mediator abstrak. Menerima pesan dari satu kelas kolega dan kemudian mempengaruhi kelas simultan lainnya melalui pesan.
Kelas Kolega: Jika suatu objek memengaruhi objek lain dan juga dipengaruhi oleh objek lain, maka kedua objek ini disebut kelas kolega. Dalam diagram kelas, hanya ada satu kelas kolega, yang sebenarnya merupakan penghilangan kenyataan. Dalam aplikasi praktis, kelas kolega umumnya terdiri dari banyak, dan mereka mempengaruhi dan bergantung satu sama lain. Semakin banyak kolega, semakin rumit hubungannya. Selain itu, kelas kolega juga dapat direpresentasikan sebagai serangkaian implementasi yang mewarisi kelas abstrak yang sama. Dalam model perantara, pesan tersebut harus ditransmisikan melalui perantara di antara rekan kerja.
Mengapa menggunakan model perantara
Secara umum, hubungan antara kelas kolega relatif kompleks. Ketika beberapa kelas kolega berkorelasi, hubungan mereka akan muncul sebagai struktur mesh yang kompleks. Ini adalah arsitektur yang terlalu banyak dipasangkan, yaitu, tidak kondusif untuk menggunakan kembali kelas dan tidak stabil. Misalnya, pada gambar di bawah ini, ada enam objek seperti kolega. Jika Objek 1 berubah, 4 objek akan terpengaruh. Jika objek 2 berubah, maka 5 objek akan terpengaruh. Dengan kata lain, desain korelasi langsung antara rekannya tidak baik.
Jika model perantara diperkenalkan, hubungan antara kelas kolega akan menjadi struktur bintang. Dari gambar tersebut, kita dapat melihat bahwa perubahan dalam kelas apa pun hanya akan mempengaruhi kelas itu sendiri dan perantara, yang akan mengurangi kopling sistem. Desain yang baik pasti tidak akan merangkum semua logika pemrosesan hubungan objek di kelas ini, tetapi akan menggunakan kelas khusus untuk mengelola perilaku yang bukan milik Anda.
Mari kita gunakan contoh untuk menggambarkan apa kelas kolega: ada dua kelas A dan B, yang masing -masing memiliki angka, dan kita harus memastikan bahwa angka -angka di Kelas B selalu 100 kali angka di Kelas A. Artinya, ketika memodifikasi jumlah Kelas A, melipatgandakan angka dengan 100 dan menugaskannya ke Kelas B, dan ketika memodifikasi Kelas B, membagi angka dengan 100 dan menugaskannya. Kodenya adalah sebagai berikut:
Kelas Abstrak AbstractColleAgue {nomor int yang dilindungi; public int getNumber () {nomor kembali; } public void setNumber (int number) {this.number = number; } // metode abstrak, memodifikasi objek yang terkait secara bersamaan saat memodifikasi nomor public abstrak void setNumber (nomor int, abstrakcolleague coll); } class colleaguea memperluas abstrak abstrakcolleavue {public void setNumber (nomor int, abstractColleague coll) {this.number = angka; coll.setnumber (angka*100); }} class colleAgueB memperluas AbstractColleAgue {public void setNumber (nomor int, AbstractColleague coll) {this.number = number; coll.setnumber (angka/100); }} klien kelas publik {public static void main (string [] args) {abstractColleague colla = colleaguea baru (); AbstractColleague Collb = rekan baru (); System.out.println ("=============================================== ==================================================================== ==================================================================== ==================================================================== ==================================================================== ==================================================================== ==================================================================== ==================================================================== System.out.println ("Nilai Nomor Collb:"+Collb.GetNumber ()); Dalam kode di atas, Kelas A dan B terkait melalui Asosiasi Langsung. Jika kita ingin menggunakan model perantara, Kelas A dan B tidak dapat berhubungan langsung. Mereka harus menggunakan perantara untuk mencapai tujuan asosiasi.
Kelas Abstrak AbstractColleAgue {nomor int yang dilindungi; public int getNumber () {nomor kembali; } public void setNumber (int number) {this.number = number; } // Perhatikan bahwa parameter di sini bukan lagi kolega, tetapi setnumber abstrak publik perantara (bilangan int, abstractMediator AM); } class colleaguea memperluas abstrak abstrakcolleAgue {public void setNumber (nomor int, abstractMediator AM) {this.number = angka; am.aaffectb (); }} class colleAgueB memperluas abstrak abstrakcoleeague {@override public void setNumber (nomor int, abstractMediator AM) {this.number = angka; am.baffecta (); }} abstrak kelas abstrakmediator {abstractColleague yang dilindungi; AbstractColleague yang dilindungi B; Publik AbstractMediator (AbstractColleAgue A, AbstractColleague b) {a = a; B = b; } public abstrak void aaffectb (); public abstrak void Baffecta (); } mediator kelas memperluas abstractMediator {mediator publik (AbstractColleague A, AbstractColleague b) {super (a, b); } // menangani dampak A pada b public void aaffectb () {int number = a.getNumber (); B.SetNumber (angka*100); } // menangani dampak B pada baffecta public void () {int number = b.getNumber (); A.setNumber (angka/100); }} klien kelas publik {public static void main (string [] args) {abstractColleague colla = colleaguea baru (); AbstractColleague Collb = rekan baru (); AbstractMediator AM = mediator baru (Colla, Collb); System.out.println ("========================= Efek dengan pengaturan A ================================================================================================================================================================================================ ============================================================================================================================================================================= ============================================================================================================================================================================= ================================================================================================================================================== System.out.println ("Nilai Nomor Colla adalah:"+Colla.getNumber ()); B =================================================================================================================================== ============================================================================================================================================= ======================================================================================================================================== ============================================================================================================================================= System.out.println ("Nilai Nomor Collb adalah:"+Collb.getNumber ());Meskipun kodenya relatif panjang, masih relatif mudah dimengerti. Bahkan, itu adalah untuk mengemas ulang kode yang awalnya menangani hubungan objek ke dalam kelas mediasi, dan menangani hubungan antara objek melalui kelas mediasi ini.
Keuntungan dari model perantara
1. Penggunaan model perantara yang tepat dapat menghindari kopling berlebihan antara kelas kolega, sehingga setiap kelas kolega dapat digunakan secara relatif secara mandiri.
2. Menggunakan pola mediator dapat mengubah hubungan satu-ke-banyak antara objek menjadi hubungan satu-ke-satu, membuat hubungan antara objek mudah dipahami dan dipelihara.
3. Menggunakan model perantara dapat mengabstraksi perilaku dan kolaborasi objek, dan dapat menangani interaksi antara objek lebih fleksibel.
Skenario yang berlaku
Dalam pemrograman yang berorientasi objek, suatu kelas pasti akan bergantung pada kelas lain, dan kelas yang sepenuhnya independen tidak ada artinya. Juga cukup umum bagi kelas untuk mengandalkan beberapa kelas secara bersamaan. Karena situasi seperti itu ada, itu berarti bahwa ketergantungan satu-ke-banyak memiliki rasionalitasnya. Penggunaan pola mediator yang tepat dapat membuat hubungan objek yang awalnya berantakan, tetapi jika disalahgunakan, itu dapat membawa efek negatif. Secara umum, model mediator hanya dipertimbangkan untuk hubungan antara kelas rekan kerja di mana ada struktur mesh. Struktur mesh dapat diubah menjadi struktur bintang untuk membuat hubungan antara kolega lebih jelas.
Model perantara adalah model yang relatif umum dan model yang relatif mudah disalahgunakan. Dalam kebanyakan kasus, hubungan antara kelas kolega tidak akan rumit untuk struktur mesh yang kacau. Oleh karena itu, dalam kebanyakan kasus, tidak masalah untuk merangkum ketergantungan antara objek dalam kelas kolega, dan tidak perlu memperkenalkan model perantara. Penyalahgunaan model perantara hanya akan membuat segalanya lebih rumit.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.