- 内容:为其他对象提供一种代理以控制对这个对象的访问。
- 角色:
- 抽象实体(Subject)
- 实体(RealSubject)
- 代理(Proxy)
- 适用场景:
- 远程代理:为远程的对象提供代理。
- 虚代理:根据需要创建恨大的对象。
- 保护代理:控制对原始对象的访问,用于对象有不同访问权限时。
- 优点:
- 远程代理:可以隐藏对象位于远程地址空间的事实。
- 虚代理:可以进行优化,例如根据要求创建对象。
- 保护代理:允许在访问一个对象时有一些附加的内务处理。

from abc import abstractmethod, ABCMetaclass Subject(metaclass=ABCMeta): @abstractmethod def get_content(self): raise NotImplementedclass RealSubject(Subject): def __init__(self, filename): print("读取%s文件内容" % filename) f = open(filename) self.content = f.read() f.close() def get_content(self): return self.contentclass ProxyA(Subject): def __init__(self, filename): self.subj = RealSubject(filename) def get_content(self): return self.subj.get_content()# --- 虚代理class ProxyB(Subject): def __init__(self, filename): self.filename = filename self.subj = None def get_content(self): if not self.subj: self.subj = RealSubject(self.filename) return self.subj.get_content()class ProxyC(Subject): def __init__(self, filename): self.subj = RealSubject(filename) def get_content(self): return "???"filename = "abc.txt"username = input()if username != "gaogao": p = ProxyC(filename)else: p = ProxyA(filename)print(p.get_content())