Mẫu thiết kế - Mẫu proxy

Trong mẫu proxy, một lớp đại diện cho chức năng của một lớp khác. Loại mô hình thiết kế này thuộc mô hình cấu trúc.

Trong mẫu proxy, chúng tôi tạo đối tượng có đối tượng gốc để giao tiếp chức năng của nó với thế giới bên ngoài.

Thực hiện

Chúng ta sẽ tạo một giao diện Image và các lớp cụ thể triển khai giao diện Image . ProxyImage là một lớp proxy để giảm dung lượng bộ nhớ tải đối tượng RealImage .

ProxyPatternDemo , lớp demo của chúng tôi, sẽ sử dụng ProxyImage để có được một hình ảnh đối tượng để tải và hiển thị như nó cần.

Bước 1

Tạo giao diện.

Image.java

public interface Image {
   void display();
}

Bước 2

Tạo các lớp cụ thể triển khai cùng một giao diện.

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();
   }
}

Bước 3

Sử dụng ProxyImage để lấy đối tượng của lớp RealImage khi được yêu cầu.

ProxyPatternDemo.java

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

      //image will be loaded from disk
      image.display(); 
      System.out.println("");
      
      //image will not be loaded from disk
      image.display(); 	
   }
}

Bước 4

Xác minh kết quả đầu ra.

Loading test_10mb.jpg
Displaying test_10mb.jpg

Displaying test_10mb.jpg