结构型模式-动态代理模式
# 模式类型:结构性模型 # 模型方法:动态代理模式 # 作用:相对于静态代理,动态代理更灵活。不需要手动实现接口类中的所有方法,接口新增方法后动态代理无需修改。 # 使用场景:监控。日志,限流 from abc import ABCMeta, abstractmethod import types class ITeacher(metaclass=ABCMeta): """教师接口""" @abstractmethod def teach(self): pass class ProxyFactory(): target = None def __init__(self, target): self.target = target def __getattr__(self, item): # 使用反射动态生成代理函数 if hasattr(self.target, item): attr = getattr(self.target, item) if isinstance(attr, types.MethodType): def method(*args, **kwargs): print("课前准备工作") attr(*args, **kwargs) print("课后结尾工作") return method else: return attr else: raise AttributeError("%s object has not attr %s" % (self.target.__class__.__name__, item)) class TeacherLi(ITeacher): def teach(self): print("李老师讲课") if __name__ == "__main__": # 创建目标对象 li_teacher = TeacherLi() # 创建代理对象,并将被代理对象传给代理对象 teacher_proxy = ProxyFactory(li_teacher) # 通过代理对象,调用被代理对象方法 teacher_proxy.teach()