Definisi Pengunjung: Operasi yang bertindak pada setiap objek dalam grup objek tertentu. Ini memungkinkan Anda untuk mendefinisikan operasi baru yang bertindak pada objek -objek ini tanpa mengubahnya sendiri.
Di Java, pola pengunjung sebenarnya memisahkan elemen dalam struktur pengumpulan dan perilaku beroperasi pada elemen -elemen ini.
Mengapa Menggunakan Mode Pengunjung
Koleksi Java (termasuk vektor dan hashtable) adalah teknologi yang paling sering kami gunakan, tetapi koleksi tampaknya menjadi tong pewarnaan hitam besar. Maka kita harus menggunakan jika untuk menilai, seperti:
Salinan kode adalah sebagai berikut:
Iterator iterator = collection.iterator ()
while (iterator.hasnext ()) {
Objek o = iterator.next ();
if (o contoh koleksi)
MessyPrintCollection ((koleksi) o);
lain jika (o instance dari string)
System.out.println ("'"+O.ToString ()+"'");
lain jika (o instance dari float)
System.out.println (o.tostring ()+"f");
kalau tidak
System.out.println (O.ToString ());
}
Dalam contoh di atas, kami menggunakan instanceof untuk menentukan jenis o.
Jelas, kerugian dari melakukan ini jika lain jika kode itu rumit, kita dapat menyelesaikannya menggunakan mode pengunjung.
Cara menggunakan mode pengunjung
Sebagai contoh di atas, kami merancang pengunjung antarmuka:
Salinan kode adalah sebagai berikut:
Pengunjung Antarmuka Publik
{
public void visitCollection (koleksi koleksi);
public void visitstring (string string);
public void visitfloat (float float);
}
Dalam antarmuka ini, letakkan jenis kelas yang kami pikir koleksi dimungkinkan.
Dengan pengunjung, kita perlu dikunjungi. tidak menyambutnya, pengunjung tidak akan dapat mengunjungi).
Kami mendefinisikan antarmuka ini sebagai dapat dikunjungi, yaitu untuk menentukan operasi penerimaan, yaitu, membuat setiap elemen koleksi dapat diakses.
Salinan kode adalah sebagai berikut:
antarmuka publik dapat dikunjungi {
public void menerima (pengunjung pengunjung);
}
OK, dengan dua antarmuka, kita perlu menentukan implementasi spesifik mereka (kelas konkret):
Salinan kode adalah sebagai berikut:
Concreteelement kelas publik mengimplementasikan yang dapat dikunjungi
{
nilai string pribadi;
public concreteelement (string string) {
nilai = string;
}
// Tentukan konten spesifik Accept di sini adalah kalimat yang sangat sederhana untuk memanggil public void accept (pengunjung pengunjung) {
pengunjung.VisitString (ini);
}
}
Mari kita lihat implementasi konkret pengunjung:
Salinan kode adalah sebagai berikut:
Concretevisitor kelas publik mengimplementasikan pengunjung
{
// Dalam metode ini, kami menerapkan akses yang berhasil ke elemen -elemen koleksi public void visitCollection (koleksi koleksi) {
Iterator iterator = collection.iterator ()
while (iterator.hasnext ()) {
Objek o = iterator.next ();
if (o contoh dari dapat dikunjungi)
((Dapat dikunjungi) o). Aksep (ini);
}
public void visitstring (string string) {
System.out.println ("''"+String+"'");
}
public void visitfloat (float float) {
System.out.println (float.tostring ()+"f");
}
}
Dalam kunjungan di atas, kami menerapkan akses ke setiap elemen koleksi, hanya menggunakan satu pernyataan penilaian, hanya untuk menentukan apakah itu dapat diakses.
Pada titik ini, kami telah menyelesaikan arsitektur dasar model pengunjung.
Prasyarat untuk menggunakan mode pengunjung
Jenis objek dalam struktur grup objek jarang diubah, yaitu, jenis identitas pengunjung jarang diubah, seperti jenis pengunjung di atas jarang diubah, jika operasi baru diperlukan, seperti pada contoh di atas, kami Selain implementasi spesifik konkret, Concreteelement2 Concreteelement3 baru juga diperlukan.
Dapat dilihat bahwa ada prasyarat untuk menggunakan mode pengunjung.
Jika pengunjung juga sering berubah, yaitu, tipe objek dalam kelompok objek sering berubah, saran umum adalah bahwa lebih baik untuk mendefinisikan operasi satu per satu di kelas objek ini, tetapi teknologi Java mencerminkan masalah ini.