mod pelawat
Dalam Corak Pelawat, kami menggunakan kelas pelawat, yang mengubah algoritma pelaksanaan kelas elemen. Dengan cara ini, algoritma pelaksanaan elemen boleh berubah apabila pelawat berubah. Corak reka bentuk jenis ini ialah corak tingkah laku. Mengikut skema, objek elemen telah menerima objek pelawat supaya objek pelawat boleh mengendalikan operasi pada objek elemen.
Pengenalan
Niat: Terutamanya memisahkan struktur data daripada operasi data.
Terutamanya menyelesaikan: Struktur data yang stabil dan isu gandingan operasi yang tidak menentu.
Bila hendak digunakan: Anda perlu melakukan banyak operasi berbeza dan tidak berkaitan pada objek dalam struktur objek, dan anda perlu mengelak daripada membiarkan operasi ini "mencemarkan" kelas objek ini. Gunakan akses Corak Orator merangkumnya ke dalam kelas.
Cara menyelesaikan: Tambahkan antara muka pada kelas yang dilawati untuk menyediakan antara muka luaran untuk menerima pelawat.
Kod utama: Terdapat kaedah dalam kelas pangkalan data yang menerima pelawat dan menghantar rujukannya sendiri kepada pelawat.
Contoh permohonan: Anda adalah tetamu di rumah rakan, anda adalah pelawat, rakan menerima kunjungan anda, anda lulus penerangan rakan, dan kemudian membuat penilaian terhadap penerangan rakan , ini ialah mod Pelawat.
Kelebihan: 1. 2. Kebolehskalaan yang sangat baik. 3. Fleksibiliti.
Kelemahan: 1. Elemen khusus mendedahkan butiran kepada pelawat, yang melanggar Prinsip Dimit. 2. Sukar untuk mengubah elemen tertentu. 3. Ia melanggar prinsip penyongsangan kebergantungan dan bergantung pada kelas konkrit dan bukannya abstraksi.
Senario penggunaan: 1 Kelas yang sepadan dengan objek dalam struktur objek jarang berubah, tetapi selalunya perlu untuk mentakrifkan operasi baharu pada struktur objek ini. 2. Banyak operasi yang berbeza dan tidak berkaitan perlu dilakukan pada objek dalam struktur objek, dan anda perlu mengelak daripada membiarkan operasi ini "mencemarkan" kelas objek ini, dan anda tidak mahu mengubah suai kelas ini apabila menambah operasi baharu.
Nota: Pelawat boleh menyatukan fungsi dan membuat laporan, UI, pemintas dan penapis.
Melaksanakan
Kami akan mencipta antara muka ComputerPart yang mentakrifkan operasi yang diterima. Papan Kekunci, Tetikus, Monitor dan Komputer ialah kelas entiti yang melaksanakan antara muka ComputerPart. Kami akan mentakrifkan antara muka lain ComputerPartVisitor yang mentakrifkan operasi kelas pelawat. Komputer menggunakan pelawat entiti untuk melakukan tindakan yang sepadan.
VisitorPatternDemo, kelas demo kami menggunakan kelas Komputer, ComputerPartVisitor untuk menunjukkan penggunaan corak pelawat.
Langkah 1
Tentukan antara muka yang mewakili elemen.
ComputerPart.java
public interface class ComputerPart { public void accept(ComputerPartVisitor computerPartVisitor); }
Langkah 2
Buat kelas entiti yang memanjangkan kelas di atas.
Papan Kekunci.java
public class Keyboard implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); } }
Monitor.java
public class Monitor implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); } }
Mouse.java
rreeeComputer.java
public class Mouse implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); } }
Langkah 3
Tentukan antara muka yang mewakili pelawat.
ComputerPartVisitor.java
public class Computer implements ComputerPart { ComputerPart[] parts; public Computer(){ parts = new ComputerPart[] {new Mouse(), new Keyboard(), new Monitor()}; } @Override public void accept(ComputerPartVisitor computerPartVisitor) { for (int i = 0; i < parts.length; i++) { parts[i].accept(computerPartVisitor); } computerPartVisitor.visit(this); } }
Langkah 4
Buat pelawat entiti yang melaksanakan kelas di atas.
ComputerPartDisplayVisitor.java
public interface ComputerPartVisitor { public void visit(Computer computer); public void visit(Mouse mouse); public void visit(Keyboard keyboard); public void visit(Monitor monitor); }
Langkah 5
Gunakan ComputerPartDisplayVisitor untuk memaparkan komponen <Komputer .
VisitorPatternDemo.java
public class ComputerPartDisplayVisitor implements ComputerPartVisitor { @Override public void visit(Computer computer) { System.out.println("Displaying Computer."); } @Override public void visit(Mouse mouse) { System.out.println("Displaying Mouse."); } @Override public void visit(Keyboard keyboard) { System.out.println("Displaying Keyboard."); } @Override public void visit(Monitor monitor) { System.out.println("Displaying Monitor."); } }Langkah 6Sahkan output.
public class VisitorPatternDemo { public static void main(String[] args) { ComputerPart computer = new Computer(); computer.accept(new ComputerPartDisplayVisitor()); } }