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()