23种设计模式介绍(Python示例讲解)(23)

2023-04-30 来源:飞速影视
在上面的类图中,Subject 是抽象主题,定义了客户端和真实主题之间的接口,RealSubject 是真实主题,实现了抽象主题定义的接口,ProxySubject 是代理主题,也实现了抽象主题定义的接口,并且内部持有一个 RealSubject 对象,以便在需要时代理访问 RealSubject 对象。
下面是一个 Python 实现的示例,假设我们有一个邮件服务器,我们需要实现一个邮件客户端程序,但我们不想直接连接到邮件服务器,因为这样可能会存在一些风险,我们想通过代理来连接邮件服务器,以此增加一些安全性:
# 抽象主题class Email: def send(self, message): pass# 真实主题class EmailServer(Email): def send(self, message): print(f"Sending email: {message}")# 代理主题class EmailProxy(Email): def __init__(self, email_server): self.email_server = email_server def send(self, message): if self.is_allowed_to_send(message): self.email_server.send(message) self.log(message) else: print("Not allowed to send email") def is_allowed_to_send(self, message): # Check if user is allowed to send the email return True def log(self, message): # Log the email to a file print(f"Logging email: {message}")# 客户端if __name__ == "__main__": email_server = EmailServer() email_proxy = EmailProxy(email_server) email_proxy.send("Hello, world!")
代理讲解:
在上面的示例中,Email 是抽象主题,定义了发送邮件的方法 send()。EmailServer 是真实主题,实现了 send() 方法来发送邮件。EmailProxy 是代理主题,它实现了 send() 方法,并且内部持有一个 EmailServer 对象,以便在需要时代理访问 EmailServer 对象。在 send() 方法中,它首先检查是否允许发送邮件,然后调用 EmailServer对象的 send() 方法来发送邮件,并在发送完成后记录日志。最后,我们在客户端中创建了一个 EmailServer 对象和一个EmailProxy 对象,然后通过 EmailProxy 对象来发送邮件。
相关影视
合作伙伴
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)

www.fs94.org-飞速影视 粤ICP备74369512号