Python Design Patterns - Proxy
O padrão de design do proxy inclui um novo objeto, que é denominado “Proxy” no lugar de um objeto existente denominado “Sujeito Real”. O objeto proxy criado do sujeito real deve estar na mesma interface, de forma que o cliente não tenha nenhuma idéia de que o proxy é usado no lugar do objeto real. As solicitações geradas pelo cliente ao proxy são passadas pelo sujeito real.
A representação UML do padrão de proxy é a seguinte -
Como implementar o padrão de proxy?
Vamos agora ver como implementar o padrão de 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
Resultado
O programa acima gera a seguinte saída -
O design do padrão de proxy ajuda a replicar as imagens que criamos. A função display_image () ajuda a verificar se os valores estão sendo impressos no prompt de comando.