definisi:
Berikan pengganti atau placeholder untuk objek lain untuk mengontrol akses ke sana.
Proxy untuk objek lain untuk mengontrol akses ke objek ini.
Deskripsi Umum:
Ini umumnya berisi tiga peran: tema abstrak, tema konkret, dan tema agen.
Diagram Kelas Umum:
Kode Umum:
Paket Proxy; // Abstrak Topik Kelas: Subjek Antarmuka Publik {public void dosomething ();} Paket proxy; // Topik tertentu kelas publik kelas publik mengimplementasikan subjek {@override public void dosomething () {System.out.println ("Logika Bisnis ..."); }} paket proxy; // proxy topic class proxy mengimplementasikan subjek {subjek pribadi sub = null; @Override public void dosomething () {this.sub.dosomething (); } proxy publik (sub subjek) {this.sub = sub; }} paket proxy; // klien klien klien klien {public static void main (string [] args) {subjek realsub = new realsubject (); Subjek proxy = proxy baru (realsub); proxy.dosomething (); }}keuntungan :
1. Tanggung jawab yang jelas
2. Ekspansi tinggi
Ekstensi mode proxy:
Agen Normal:
Kelas tema spesifik transparan ke tingkat tingkat tinggi, dan kelas tema spesifik dibangun di kelas tema proxy.
Implementasi Kode:
Paket GeneralProxy; subjek antarmuka publik {public void dosomething ();} Paket GeneralProxy; Kelas Publik RealSubject mengimplementasikan subjek {private string name = null; @Override public void dosomething () {System.out.println (this.name + "proxy, mengeksekusi logika bisnis ..."); } public realsubject (subjek proxy, name string) melempar pengecualian {if (proxy == null) {lempar pengecualian baru ("Objek proxy tidak dapat dibuat"); } else {this.name = name; }}} Paket GeneralProxy; Proxy kelas publik mengimplementasikan subjek {subjek pribadi realsub = null; proxy publik (nama string) {coba {realsub = new realsubject (this, name); } catch (Exception e) {E.PrintStackTrace (); }} public void dosomething () {realsub.dosomething (); }} Paket GeneralProxy; klien kelas publik {public static void main (string [] args) {// proxy proxy proxy biasa = proxy baru ("zhang san"); proxy.dosomethaing (); }}
Proxy Paksa:
Anda harus mendapatkan objek kelas topik proxy dengan mengakses kelas topik tertentu, dan kemudian menggunakan kelas topik proxy untuk mengontrol akses.
Implementasi Kode:
Paket Must Proxy; subjek antarmuka publik {public void dosomething (); Subjek publik getProxy ();} Paket MustProxy; Kelas Publik RealSubject mengimplementasikan subjek {private string name = null; proxy subjek pribadi = null; @Override public void dosomething () {if (isProxy ()) {System.out.println (this.name + "proxy, mengeksekusi logika bisnis ..."); } else {System.out.println ("Harap akses proxy terlebih dahulu ..."); }} public realsubject (nama string) {this.name = name; } subjek publik getProxy () {proxy = new proxy (this); kembalikan ini.proxy; } private boolean isProxy () {if (this.proxy == null) {return false; } else {return true; }}} Paket MustProxy; Proxy kelas publik mengimplementasikan subjek {subjek pribadi realsub = null; proxy publik (subjek realsub) {this.realsub = realsub; } public void dosomething () {this.realsub.dosomething (); } subjek publik getProxy () {return ini; }} paket MustProxy; klien kelas publik {public static void main (string [] args) {subjek realsub = new realsubject ("zhang san"); realsub.dosomething (); Subjek proxy = realsub.getproxy (); proxy.dosomething (); }} Skenario Aplikasi
Di dunia nyata, sekretaris setara dengan agen. Jika bos mengadakan rapat, maka beri tahu karyawan tentang waktu pertemuan, atur tempat, urutkan venue setelah pertemuan, dan sebagainya, dll., Anda dapat menyerahkan pekerjaan terkait rapat kepada Sekretaris. Bos hanya perlu mengadakan pertemuan dan tidak perlu melakukan hal -hal itu secara langsung. Demikian pula, dalam pemrograman kami, kami juga dapat menggunakan pola proxy untuk memisahkan kode yang dikombinasikan dengan serangkaian logika yang tidak terkait, seperti kode log dalam kode bisnis dapat dilakukan di proxy. AOP Spring adalah aplikasi proxy dinamis yang khas.
Bentuk aplikasi mode proxy
(1) Proxy jarak jauh - dapat menyembunyikan fakta bahwa suatu objek ada di ruang alamat yang berbeda. Ini juga memungkinkan klien untuk mengakses objek pada mesin jarak jauh. Mesin jarak jauh mungkin memiliki kinerja komputasi yang lebih baik dan kecepatan pemrosesan, dan dapat dengan cepat menanggapi dan memproses permintaan klien.
(2) Proxy virtual memungkinkan objek dengan overhead memori tinggi dibuat saat dibutuhkan. Buat hanya saat kita benar -benar membutuhkan objek ini.
(3) Proxy copy-on-write digunakan untuk mengontrol penyalinan objek dengan menunda penyalinan objek sampai pelanggan benar-benar membutuhkannya. Ini adalah varian dari proxy virtual.
(4) Proxy Perlindungan (Akses)) memberikan berbagai tingkat hak akses objek target untuk pelanggan yang berbeda
(5) Proxy cache menyediakan penyimpanan sementara untuk hasil komputasi overhead. Ini memungkinkan banyak pelanggan untuk berbagi hasil untuk mengurangi perhitungan atau latensi jaringan.
(6) Firewall Proxy mengontrol akses ke sumber daya jaringan dan melindungi subjek dari pelanggan jahat.
(7) SynchronizationProxy menyediakan akses yang aman ke topik dalam kasus multi-threading.
(8) Proxy Referensi Cerdas - Ketika suatu objek direferensikan, ia menyediakan beberapa operasi tambahan, seperti merekam jumlah panggilan ke objek ini, dll.
(9) Kompleksitas menyembunyikan proxy digunakan untuk menyembunyikan kompleksitas kumpulan kelas yang kompleks dan melakukan kontrol akses. Terkadang itu juga disebut proxy façade, yang tidak sulit dipahami. Mode proxy dan penampilan tersembunyi yang kompleks berbeda karena proxy mengontrol akses, sedangkan mode penampilan berbeda karena proxy mengontrol akses, sedangkan mode penampilan hanya menyediakan set antarmuka lain.