设计模式(Python语言)----代理模式(python的语言编程模式)

网友投稿 290 2022-08-23


设计模式(Python语言)----代理模式(python的语言编程模式)

更多信息请参考 【设计模式】

代理模式内容

为其他对象提供一种代理以控制对这个对象的访问

代理模式的角色

抽象实体(Subject)实体(RealSubject)代理(Proxy)

代理模式的应用场景

远程代理:为远程的对象提供代理虚代理:根据需要创建很大的对象保护代理:控制对原始对象的访问,用于对象有不同访问权限时

代理模式的优点

远程代理:可以隐藏对象位于远程地址空间的事实虚代理:可以进行优化,例如根据要求创建对象保护代理:允许在访问一个对象使有一些附加的内务处理

代理模式实例

虚代理实例代码如下

from abc import ABCMeta,abstractmethodclass Subject(metaclass=ABCMeta): @abstractmethod def get_content(self): pass @abstractmethod def set_content(self,content): passclass RealSubject(Subject): def __init__(self,filename): self.filename=filename f=open(filename) self.content=f.read() f.close() def get_content(self): return self.content def set_content(self,content): f=open(self.filename,'w') f.write(content) f.close()class VirtualProxy(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() def set_content(self,content): if not self.subj: self.subj=RealSubject(self.filename) return self.subj.set_content(content)if __name__=="__main__": subj=VirtualProxy("test.txt")

执行结果为空,这就是虚代理的作用

保护代理实例代码如下:

from abc import ABCMeta,abstractmethodclass Subject(metaclass=ABCMeta): @abstractmethod def get_content(self): pass @abstractmethod def set_content(self,content): passclass RealSubject(Subject): def __init__(self,filename): self.filename=filename f=open(filename) self.content=f.read() f.close() def get_content(self): return self.content def set_content(self,content): f=open(self.filename,'w') f.write(content) f.close()class ProtectedProxy(Subject): def __init__(self,filename): self.subj=RealSubject(filename) def get_content(self): return self.subj.get_content() def set_content(self,content): raise PermissionError("无写入权限")if __name__=="__main__": subj=ProtectedProxy("test.txt") subj.set_content("hello world")

执行结果如下,这里,还可以通过其他条件进行限制比如作者名或者文本内容或者文本长度等等

Traceback (most recent call last): File "G:\src\blog_design_patterns\tests\demo.py", line 41, in subj.set_content("hello world") File "G:\src\blog_design_patterns\tests\demo.py", line 37, in set_content raise PermissionError("无写入权限")


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:设计模式(Python语言)----组合模式(设计模式Python)
下一篇:Spring Cloud Eureka: 指定Zone方式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~