Rumah >Java >javaTutorial >Cara memahami mod proksi Java
Kadangkala, kita mungkin tidak mahu berhadapan dengan sesuatu atau seseorang secara langsung, jadi kita boleh mencari perantara Go dan melakukan sesuatu untuk kita, seperti menghantar hadiah, menelefon untuk urusan, mencari tukang cuci untuk pergi ke bandar tertentu, dsb. Dengan cara ini, pihak lain tidak tahu siapa yang terlibat di sebalik pengantara, dan ia memainkan peranan sebagai perantara dan melindungi objek sasaran. Ini adalah model agensi. Maksudnya, seorang perantara melakukannya untuk anda.
Atas sebab tertentu, adalah perlu untuk menyediakan proksi untuk objek untuk mengawal akses kepada objek. Pada masa ini, objek capaian tidak sesuai atau tidak boleh merujuk secara langsung objek sasaran, dan objek proksi bertindak sebagai perantara antara objek capaian dan objek sasaran
Rajah struktur ringkas:
Kelebihan:
1 antara klien dan objek sasaran. Peranan melindungi objek sasaran
2 Ia boleh mengembangkan fungsi objek sasaran
3. yang mengurangkan gandingan sistem pada tahap tertentu dan meningkatkan kerumitan program
Kelemahan:
1. Ia akan menyebabkan bilangan kelas dalam sistem reka bentuk untuk meningkat (kerana terdapat satu atau lebih kelas perantara (ejen))
2. Menambah objek proksi antara klien dan objek sasaran akan memperlahankan kelajuan pemprosesan permintaan
3. Meningkatkan kerumitan sistem
Corak proksi dibahagikan kepada proksi statik (artikel ini) dan proksi dinamik (seterusnya artikel) :
Statik: Pengaturcara mencipta kelas proksi atau alat tertentu secara automatik menjana kod sumber dan kemudian menyusunnya daripada kelas proksi sudah wujud sebelum atur cara dijalankan
Dinamik: Dicipta secara dinamik menggunakan mekanisme pantulan semasa atur cara berjalan
1 Kelas tema abstrak: mengisytiharkan kaedah perniagaan yang dilaksanakan oleh tema sebenar dan objek proksi melalui antara muka atau kelas abstrak
2. Kelas tema sebenar: melaksanakan tema abstrak Perniagaan khusus ialah objek sebenar yang diwakili oleh objek proksi, yang merupakan objek akhir untuk dirujuk
3 . Kelas proksi: menyediakan antara muka yang sama seperti topik sebenar, dan mengandungi rujukan dalaman kepada Rujukan topik sebenar, yang boleh mengakses, mengawal atau melanjutkan fungsi tema sebenar
Pertunjukan kod :
Tentukan tema abstrak:
Apabila menggunakan proksi statik, anda perlu menentukan antara muka atau kelas induk, dan objek proksi dan objek proksi melaksanakan antara muka yang sama atau mewarisi kelas induk yang sama
/** *抽象主题 */ public interface Subject { void Request(); }
Topik sebenar:
/** *真实主题类:实现抽象主题 */ public class RealSubject implements Subject{ @Override public void Request() { System.out.println("您的航班正在飞行"); } }
Kelas proksi:
//代理类,实现抽象类的接口 public class Proxy implements Subject{ private RealSubject realSubject; @Override public void Request() { //先判断是否存在真实主题RealSubject //如果没有,就新建一个 if(realSubject == null){ realSubject = new RealSubject(); } //预处理,使用这个方法 preRequest(); //去访问真实主题类的方法 realSubject.Request(); //代理类的后续方法 postRequest(); } private void preRequest() { System.out.println("航班马上起飞啦"); } private void postRequest() { System.out.println("航班到达目的地,感谢乘坐"); } }
Kelas ujian:
public class Test { public static void main(String[] args) { //使用代理去访问RealSubject里面的Request Proxy proxy = new Proxy(); proxy.Request(); } }
Keputusan Output:
Penerbangan akan berlepas tidak lama lagi
Penerbangan anda sedang terbang
Penerbangan telah tiba di destinasi, terima kasih kerana mengambilnya
Melalui demonstrasi di atas, Gunakan kelas proksi untuk mengakses kaedah kelas subjek sebenar, supaya kelas ujian tidak tahu siapa yang mengaksesnya, sama ada kelas proksi atau ada orang lain di belakang kelas proksi, supaya objek itu boleh dilindungi dengan baik. Ini juga merupakan kelebihan model agensi.
Ringkasan proksi statik:
Anda boleh melanjutkan fungsi sasaran tanpa mengubah suai fungsi objek sasaran, tetapi objek proksi perlu sama dengan objek sasaran, jadi akan terdapat banyak kelas proksi Apabila terdapat banyak kelas proksi, kerumitan penyelenggaraan akan menjadi lebih besar. Kemudian anda perlu menggunakan proksi dinamik.
Apabila anda tidak boleh atau tidak mahu merujuk secara langsung objek atau terdapat kesukaran untuk mengakses objek, anda boleh mengaksesnya secara tidak langsung melalui objek proksi. Terdapat dua tujuan utama menggunakan mod proksi: Satu adalah untuk melindungi objek sasaran, dan satu lagi adalah untuk meningkatkan objek sasaran
Ringkasan senario aplikasi ini ialah dirujuk daripada Internet:
Proksi jauh, kaedah ini biasanya digunakan untuk menyembunyikan fakta bahawa objek sasaran wujud dalam ruang alamat yang berbeza untuk memudahkan akses pelanggan. Sebagai contoh, apabila pengguna memohon beberapa ruang cakera rangkaian, cakera keras maya akan dibuat dalam sistem fail pengguna Apabila pengguna mengakses cakera keras maya, dia sebenarnya mengakses ruang cakera rangkaian
ejen maya , kaedah ini selalunya digunakan apabila objek sasaran yang hendak dibuat mahal. Sebagai contoh, jika mengambil masa yang lama untuk memuat turun imej yang besar, dan beberapa pengiraan adalah rumit dan tidak dapat diselesaikan dalam masa yang singkat, anda boleh menggantikan objek sebenar terlebih dahulu dengan ejen maya berskala kecil untuk menghapuskan perasaan pengguna bahawa pelayan lambat
Proksi keselamatan, kaedah ini biasanya digunakan untuk mengawal hak akses pelbagai jenis pelanggan kepada objek sebenar
Panduan pintar digunakan terutamanya untuk menambah beberapa fungsi pemprosesan tambahan pada proksi apabila memanggil objek sasaran. Sebagai contoh, tambahkan fungsi mengira bilangan rujukan kepada objek sebenar, supaya apabila objek tidak dirujuk, ia boleh dilepaskan secara automatik
Lazy loading merujuk kepada melambatkan pemuatan daripada objek sebenar untuk meningkatkan prestasi pemuatan Sasaran. Contohnya, Hibernate mempunyai pemuatan malas atribut dan pemuatan malas jadual berkaitan
Atas ialah kandungan terperinci Cara memahami mod proksi Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!