Các mẫu thiết kế Python - Proxy

Mẫu thiết kế proxy bao gồm một đối tượng mới, được gọi là “Proxy” thay cho một đối tượng hiện có được gọi là “Đối tượng thực”. Đối tượng proxy được tạo bởi chủ thể thực phải nằm trên cùng một giao diện theo cách mà máy khách không được biết rằng proxy được sử dụng thay cho đối tượng thực. Các yêu cầu do máy khách tạo ra cho proxy được chuyển qua chủ thể thực.

Biểu diễn UML của mẫu proxy như sau:

Làm thế nào để triển khai mẫu proxy?

Bây giờ chúng ta hãy xem cách triển khai mẫu proxy.

class Image:
   def __init__( self, filename ):
      self._filename = filename
   
   def load_image_from_disk( self ):
      print("loading " + self._filename )
   
   def display_image( self ):
      print("display " + self._filename)

class Proxy:
   def __init__( self, subject ):
      self._subject = subject
      self._proxystate = None

class ProxyImage( Proxy ):
   def display_image( self ):
      if self._proxystate == None:
         self._subject.load_image_from_disk()
         self._proxystate = 1
      print("display " + self._subject._filename )

proxy_image1 = ProxyImage ( Image("HiRes_10Mb_Photo1") )
proxy_image2 = ProxyImage ( Image("HiRes_10Mb_Photo2") )

proxy_image1.display_image() # loading necessary
proxy_image1.display_image() # loading unnecessary
proxy_image2.display_image() # loading necessary
proxy_image2.display_image() # loading unnecessary
proxy_image1.display_image() # loading unnecessary

Đầu ra

Chương trình trên tạo ra kết quả sau:

Thiết kế mẫu proxy giúp tái tạo các hình ảnh mà chúng tôi đã tạo. Hàm display_image () giúp kiểm tra xem các giá trị có được in trong dấu nhắc lệnh hay không.