*
内容:为其他对象提供一种代理一控制对这个对象的访问

*
应用场景:

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

*
举个例子:
需求:完成一个文件读取和写入,完成远程代理、需代理、保护代理。
from abc import ABCMeta,abstractmethod # 代理抽象类 class Subject(metaclass=ABCMeta)
: @abstractmethod def get_content(self): pass @abstractmethod def set_content(
self,content): pass # 远程代理 class RealSubject(Subject): def __init__(self,
filename): self.filename=filename f=open(filename,'r',encoding='utf-8') print(f)
print("读取文件内容") 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) def set_content(self,content): if not
self.subj: self.subj = RealSubject(self.filename) return self.subj.set_content(
content) # 保护代理 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("无写入权限") # 远程代理 subj=
RealSubject('../test.txt') # 虚拟代理 vir=VirtualProxy('../test.txt') vir.
get_content() vir.set_content("写入文本内容") # 保护代理 protect=ProtectedProxy(
'../test.txt') protect.get_content() protect.set_content("写入文件")
* 优点:
* 远程代理:可以隐藏对象位于远程地址空间的事实
* 虚代理:可以进行优化,例如根据要求创建对象
* 保护代理:允许在访问一个对象时有一些附加的内务处理

技术
今日推荐
阅读数 170189
阅读数 23
阅读数 5
阅读数 0
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:766591547
关注微信