Modelli di progettazione Python - Proxy
Il modello di progettazione proxy include un nuovo oggetto, chiamato "Proxy" al posto di un oggetto esistente, chiamato "Soggetto reale". L'oggetto proxy creato dal soggetto reale deve trovarsi sulla stessa interfaccia in modo tale che il client non debba avere alcuna idea che il proxy venga utilizzato al posto dell'oggetto reale. Le richieste generate dal client al proxy vengono passate attraverso il soggetto reale.
La rappresentazione UML del modello proxy è la seguente:
Come implementare il modello proxy?
Vediamo ora come implementare il modello 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
Produzione
Il programma di cui sopra genera il seguente output:
Il design del modello proxy aiuta a replicare le immagini che abbiamo creato. La funzione display_image () aiuta a controllare se i valori vengono stampati nel prompt dei comandi.