
# Subject
class Graphic:
def __init__(self, file_name):
self.fileName = file_name
def draw(self):
print("base draw")
def get_file_name(self):
return self.fileName
# RealSubject
class Image(Graphic):
# Request()
def draw(self):
super().draw()
print("draw " + self.fileName)
# Proxy
class ImageProxy(Graphic):
def __init__(self, file_name):
super().__init__(file_name)
self.image = object
def draw(self):
self.get_image().draw()
def get_image(self):
if not isinstance(self.image, Graphic):
self.image = Image(self.fileName)
return self.image
# Client
proxy = ImageProxy("1.png")
# operation without creating a RealSubject
fileName = proxy.get_file_name()
# forwarded to the RealSubject
proxy.draw()
print(fileName)