一个类代理另一个类的功能

使用场景

  1. 直接访问对象带来的问题(对象在远程机器上,创建对象的开销很大,需要对访问进行控制)
  2. windows的快捷方式

Demo

  1. """
  2. 代理模式
  3. """
  4. class Image:
  5. def display(self):
  6. raise NotImplementedError
  7. class RealImage(Image):
  8. def __init__(self, file_name):
  9. self.file_name = file_name
  10. self.load_image_from_disk()
  11. def load_image_from_disk(self):
  12. print(f"loading image {self.file_name} ...")
  13. def display(self):
  14. print(f"display:{self.file_name}")
  15. class ProxyImage(Image):
  16. def __init__(self, file_name):
  17. self.file_name = file_name
  18. self.real_image = None
  19. def display(self):
  20. if self.real_image is None:
  21. self.real_image = RealImage(self.file_name)
  22. self.real_image.display()
  23. if __name__ == '__main__':
  24. image = ProxyImage('xxx.jpg')
  25. image.display()