Python 設計模式 - 代理



代理設計模式包括了一個新物件,它在現有物件(稱為“真實主體”)的位置上被稱為“代理”。為真實主體建立的代理物件必須位於同一介面,如此,客戶端不會有任何想法,以為代理用於代替真實物件。客戶端對代理發出的請求將透過真實主體傳遞。

代理模式的 UML 表示如下:

Proxy Pattern

如何實現代理模式?

現在,我們來看看如何實現代理模式。

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

輸出

以上程式生成以下輸出:

Proxy Pattern Output

代理模式設計有助於複製我們建立的影像。display_image() 函式有助於檢查值是否在命令提示符中打印出來。

廣告