Mode Pengunjung: Merangkum beberapa operasi yang bertindak pada setiap elemen dalam struktur data tertentu. Ini dapat mendefinisikan operasi baru yang bertindak pada elemen -elemen ini tanpa mengubah struktur data ini. Diagram struktur mode pengunjung adalah sebagai berikut:
Dari gambar di atas, Anda dapat melihat bahwa ia memiliki karakter berikut:
Peran pengunjung abstrak: mendefinisikan antarmuka dan menyatakan satu atau lebih operasi akses.
Peran Pengunjung Beton: Mengimplementasikan antarmuka yang dinyatakan oleh pengunjung abstrak, yaitu, berbagai operasi akses yang dinyatakan oleh pengunjung abstrak.
Peran Abstrak (dapat dikunjungi): Menyatakan operasi penerimaan, menerima objek pengunjung sebagai parameter.
Peran konkret: Menerapkan operasi penerimaan yang ditentukan oleh node abstrak.
Peran Struktur Data (Struktur Objektif): Ini dapat melintasi semua elemen dalam struktur dan menyediakan antarmuka untuk objek pengunjung untuk mengakses setiap elemen.
Kode simulasi adalah sebagai berikut:
pengunjung antarmuka {void kunjungan (Gladiolus G); kunjungan void (Chrysanthemum C); } // NAMA Pengunjung Konsep Kelas StringVisitor mengimplementasikan pengunjung {string s; string publik toString () {return s; } kunjungan public void (gladiolus g) {s = "gladiolus"; } kunjungan public void (chrysanteumum c) {s = "chrysanteumum"; }} // kelas pengunjung beton Beevisitor mengimplementasikan pengunjung {public void kunjungan (gladiolus g) {system.out.println ("Bee untuk mengakses gladiolus"); } kunjungan public void (chrysanteum c) {System.out.println ("Bee untuk mengakses chrysanteum"); }} antarmuka bunga {void accept (pengunjung v); } / * * elemen beton chrysanthemum mengimplementasikan bunga {public void menerima (pengunjung v) {v.visit (ini); }} // kelas elemen beton Gladiolus mengimplementasikan bunga {public void menerima (pengunjung v) {v.visit (ini); }} // Ini adalah kelas generator objek bunga FlowerGenerator {private static acak rand = new random (); bunga public static newflower () {switch (rand.nextint (2)) {default: case 0: return new baru gladiolus (); Kasus 1: kembalikan krisan baru (); }}} Tes kelas publik { / * * Pertama, dapatkan peran pengunjung tertentu pada klien. Struktur objek dilalui. Panggil metode penerimaan untuk setiap elemen, dan lewati peran pengunjung spesifik. Ini melengkapi seluruh proses*/ public static void main (string args []) {list <aterer> bunga = new arraylist <float> (); untuk (int i = 0; i <10; i ++) bunga. Pengunjung pengunjung = stringVisitor baru (); Iterator <Berana> iterator = floaters.iterator (); while (iterator.hasnext ()) {iterator.next (). Recept (pengunjung); System.out.println (pengunjung); } System.out.println ("-----------------------"); /** Perilaku akses baru: Akses lebah Beevisitor*/ pengunjung pengunjung2 = Beevisitor baru (); untuk (bunga bunga: bunga) {bunga.accept (pengunjung2); }}}hasil:
Gladiolus chrysanthemum chrysanthemum gladiolus chrysanthemum chrysanthemum chrysanthemum chrysanthemum gladiolus gladiolus -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Mode pengunjung dapat dipertimbangkan jika:
1. Struktur objek berisi banyak objek kelas, dan mereka memiliki antarmuka yang berbeda, dan Anda ingin menerapkan beberapa operasi yang bergantung pada kelas spesifik mereka pada objek ini.
2. Anda perlu melakukan banyak operasi yang berbeda dan tidak relevan pada objek dalam struktur objek, dan Anda ingin menghindari membiarkan operasi ini "mencemari" kelas -kelas objek ini. Pengunjung memungkinkan Anda untuk memusatkan operasi terkait dan mendefinisikannya di kelas.
3. Ketika struktur objek dibagikan oleh banyak aplikasi, gunakan mode pengunjung untuk memungkinkan setiap aplikasi hanya berisi operasi yang perlu digunakan.
4. Kelas -kelas yang mendefinisikan struktur objek jarang berubah, tetapi operasi baru sering diperlukan untuk mendefinisikan struktur ini. Mengubah Kelas Struktur Objek membutuhkan mendefinisikan ulang antarmuka untuk semua pengunjung, yang bisa menjadi biaya besar. Jika kelas struktur objek sering berubah, mungkin lebih baik untuk mendefinisikan operasi ini di kelas -kelas ini.
Orang -orang ini tampaknya menjadi saran, dan masalah spesifik perlu dianalisis dalam proyek.