mod proksi


Dalam Corak Proksi, satu kelas mewakili kefungsian kelas lain. Corak reka bentuk jenis ini ialah corak struktur.

Dalam corak proksi, kami mencipta objek dengan objek sedia ada untuk menyediakan antara muka berfungsi kepada dunia luar.

Pengenalan

Niat: Sediakan proksi untuk objek lain untuk mengawal akses kepada objek ini.

Terutamanya menyelesaikan: Masalah yang disebabkan apabila mengakses objek secara langsung, sebagai contoh: objek yang akan diakses adalah pada mesin jauh. Dalam sistem berorientasikan objek, akses terus kepada beberapa objek akan menyebabkan banyak masalah kepada pengguna atau struktur sistem atas sebab tertentu (contohnya, penciptaan objek mahal, atau operasi tertentu memerlukan kawalan keselamatan, atau memerlukan proses di luar proses. akses). Kita boleh menambah lapisan akses kepada objek ini apabila mengakses objek ini.

Bila hendak digunakan: Ingin mempunyai sedikit kawalan semasa mengakses kelas.

Cara menyelesaikan: Tambah lapisan tengah.

Kod kunci: implementasi dan gabungan kelas proksi.

Contoh aplikasi: 1. 2. Apabila Zhu Bajie pergi mencari Gao Cuilan, dia ternyata adalah Sun Wukong Ia boleh difahami seperti ini: Penampilan Gao Cuilan telah disarikan, dan kedua-dua Gao Cuilan dan Sun Wukong melaksanakan antara muka ini. dia tidak dapat mengatakan bahawa ini adalah Sun Wukong, jadi Sun Wukong dikatakan sebagai kelas Ejen Gao. 3. Anda tidak perlu membeli tiket kereta api di stesen kereta api Anda juga boleh pergi ke agensi. 4. Cek atau sijil deposit bank ialah proksi untuk dana dalam akaun. Cek digunakan sebagai ganti tunai dalam urus niaga pasaran dan memberikan kawalan ke atas dana dalam akaun pengeluar. 5. musim bunga aop.

Kelebihan: 1. 2. Kebolehskalaan yang tinggi. 3. Pintar.

Kelemahan: 1 Memandangkan objek proksi ditambah antara klien dan topik sebenar, beberapa jenis mod proksi boleh menyebabkan kelajuan pemprosesan permintaan menjadi perlahan. 2. Melaksanakan mod proksi memerlukan kerja tambahan, dan pelaksanaan beberapa mod proksi adalah sangat kompleks.

Senario penggunaan: Dibahagikan dengan tanggungjawab, biasanya terdapat senario penggunaan berikut: 1. Ejen jauh. 2. Ejen maya. 3. Ejen Copy-on-Write. 4. Ejen Lindungi (Lindungi atau Akses). 5. Ejen cache. 6. Proksi firewall. 7. Ejen penyegerakan. 8. Ejen Rujukan Pintar.

Nota: 1 Perbezaan antara corak penyesuai dan corak penyesuai: corak penyesuai terutamanya menukar antara muka objek yang sedang dipertimbangkan, manakala corak proksi tidak boleh menukar antara muka. kelas proksi. 2. Perbezaan antara mod penghias dan mod penghias: mod penghias adalah untuk meningkatkan fungsi, manakala mod proksi adalah untuk mengawalnya.

Pelaksanaan

Kami akan mencipta antara muka Imej dan kelas entiti yang melaksanakan antara muka Imej. ProxyImage ialah kelas proksi yang mengurangkan jejak memori RealImage pemuatan objek.

ProxyPatternDemo, kelas demo kami menggunakan ProxyImage untuk mendapatkan objek Imej dimuatkan dan memaparkannya seperti yang diperlukan.

proxy_pattern_uml_diagram.jpg

Langkah 1

Buat antara muka.

Image.java

public interface Image {
   void display();
}

Langkah 2

Buat kelas entiti yang melaksanakan antara muka.

RealImage.java

public class RealImage implements Image {

   private String fileName;

   public RealImage(String fileName){
      this.fileName = fileName;
      loadFromDisk(fileName);
   }

   @Override
   public void display() {
      System.out.println("Displaying " + fileName);
   }

   private void loadFromDisk(String fileName){
      System.out.println("Loading " + fileName);
   }
}

ProxyImage.java

public class ProxyImage implements Image{

   private RealImage realImage;
   private String fileName;

   public ProxyImage(String fileName){
      this.fileName = fileName;
   }

   @Override
   public void display() {
      if(realImage == null){
         realImage = new RealImage(fileName);
      }
      realImage.display();
   }
}

Langkah 3

Apabila diminta, gunakan ProxyImage untuk mendapatkan objek kelas RealImage.

ProxyPatternDemo.java

public class ProxyPatternDemo {
	
   public static void main(String[] args) {
      Image image = new ProxyImage("test_10mb.jpg");

      //图像将从磁盘加载
      image.display(); 
      System.out.println("");
      //图像将无法从磁盘加载
      image.display(); 	
   }
}

Langkah 4

Sahkan output.

rreeee