from abc import ABCMeta, abstractmethod """ 设计要点: 主题(Subject):定义操作、活动、任务的接口类 真实主题(RealSubject):真正完成操作、活动、任务的具体类 代理主题(ProxySubject):代替真实主题完成操作、活动、任务的代理类 真实主题与代理主题是一类对象,只不过是将真实主题传入代理主题,由代理主题做一些操作,在调用,使得对客户隐藏真实主题, 有点中介模式、装饰模式的意味。 """ class Subject(metaclass=ABCMeta): """主体类""" def __init__(self, name): self.__name = name def getName(self1): return self.__name @abstractmethod def request(self, content=""): pass class RealSubject(Subject): """真实主题类""" def request(self, content): print("RealSubject todo something...") class ProxySubject(Subject): """代理主题类""" def __init__(self, name, subject): super().__init__(name) self.__realSubject = subject def request(self, content=""): self.preRequest() if(self.__realSubject is not None): self.__realSubject.request(content) self.afterRequest() def preRequest(self): print("preRequest") def afterRequest(self): print("afterRequest") def testProxy(): realObj = RealSubject("RealSubject") proxyObj = ProxySubject("ProxySubject", realObj) proxyObj.request() if __name__ == "__main__": testProxy()