Python-Entwurfsmuster - Proxy
Das Proxy-Entwurfsmuster enthält ein neues Objekt, das anstelle eines vorhandenen Objekts, das als "reales Subjekt" bezeichnet wird, als "Proxy" bezeichnet wird. Das vom realen Subjekt erstellte Proxy-Objekt muss sich auf derselben Schnittstelle befinden, sodass der Client keine Vorstellung davon bekommen sollte, dass der Proxy anstelle des realen Objekts verwendet wird. Vom Client generierte Anforderungen an den Proxy werden über das eigentliche Subjekt weitergeleitet.
Die UML-Darstellung des Proxy-Musters lautet wie folgt:
Wie implementiere ich das Proxy-Muster?
Lassen Sie uns nun sehen, wie das Proxy-Muster implementiert wird.
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
Ausgabe
Das obige Programm erzeugt die folgende Ausgabe -
Das Proxy-Musterdesign hilft beim Replizieren der von uns erstellten Bilder. Mit der Funktion display_image () können Sie überprüfen, ob die Werte an der Eingabeaufforderung gedruckt werden.