- 1、本文档共33页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
PAGE1
PAGE1
设计模式–代理模式:控制对对象的访问
在上一节中,我们已经了解了设计模式的概览,包括设计模式的定义以及它们的分类。这一节,我们将深入探讨代理模式,看它是如何帮助我们控制对对象的访问,同时提供额外的操作,如日志记录、权限检查和缓存。
1代理模式的定义
代理模式是一种结构型设计模式,它允许您提供一个替代对象,或者占位符,以控制对一个对象的访问。当不能因为各种原因直接访问某个对象时,代理模式可以作为一个中间层,提供间接访问。
2代理模式的结构
代理模式主要包含以下三种角色:1.Subject(主题接口):定义了RealSubject和Proxy共同的接口,这样在任何使用RealSubject的地方,都可以使用Proxy。2.RealSubject(真实主题):定义了代理所代表的真实对象,实现Subject接口。3.Proxy(代理):包含对RealSubject的引用,提供与RealSubject相同的接口,用于控制对RealSubject的访问。
3代理模式的实例:缓存代理
假设我们有一个需要从数据库或网络获取数据的服务。直接频繁地从数据库获取数据可能会导致性能问题,尤其是数据量大时。因此,我们使用代理模式来创建一个缓存代理,它可以在内存中存储之前获取的数据,以减少对数据库的访问次数。
3.1示例代码
classImageSubject:
图片接口
defshow_image(self):
pass
classRealImage(ImageSubject):
真实图片对象
def__init__(self,filename):
self.filename=filename
#模拟从磁盘加载图片
self.load_from_disk()
defload_from_disk(self):
print(fLoadingimagefromdisk:{self.filename})
defshow_image(self):
print(fDisplayingimage:{self.filename})
classImageProxy(ImageSubject):
图片代理,用于缓存
def__init__(self,filename):
self.filename=filename
self.real_image=None
defshow_image(self):
ifself.real_imageisNone:
self.real_image=RealImage(self.filename)
self.real_image.show_image()
#使用代理模式
real_image=RealImage(image1.jpg)
real_image.show_image()
proxy_image=ImageProxy(image2.jpg)
proxy_image.show_image()
proxy_image.show_image()
3.2代码解析
我们首先定义了一个ImageSubject接口,它包含了所有真实图片和代理图片共有的方法show_image。
RealImage实现了ImageSubject接口,它会在首次被创建时加载图片,这可能是个耗时的操作。
ImageProxy也是一个ImageSubject的实现,但它的show_image方法只会加载图片一次,然后将该图片存储在代理内部,之后再调用show_image方法时,就会直接从内存中显示图片,而不再从磁盘加载。
通过这种方式,当ImageProxy被多次调用时,它会从缓存中提供数据,避免了重复加载,提升了性能。
4使用代理模式的场景
控制对对象的访问:例如,在安全性要求高的系统中,代理模式可用于检查用户的访问权限,避免对敏感资源的直接访问。
日志记录:代理可以在访问真实对象之前和之后记录某些信息,如访问时间、操作类型等。
性能优化:通过缓存机制,代理可以减少对数据库或远程服务器的直接调用,从而提高系统效率和响应速度。
对象创建延迟:如果创建对象的代价比较高昂,代理模式可以做到延迟加载,即需要时才创建对象,节省资源。
5总结性陈述
这一节我们详细探讨了代理模式如何通过提供一个替代对象来控制对真实对象的访问,特别是在需要缓存数据、检查权限和优化性能的场
您可能关注的文档
- UI设计师-UI设计模式与组件库-Ant Design_状态与进度组件:进度条与骨架屏.docx
- UI设计师-UI设计模式与组件库-Ant Design_自定义主题与样式.docx
- UI设计师-UI设计模式与组件库-Apple Human Interface Guidelines_Apple Human Interface Guidelinesall.docx
- UI设计师-UI设计模式与组件库-Apple Human Interface Guidelines_测试与优化用户界面.docx
- UI设计师-UI设计模式与组件库-Apple Human Interface Guidelines_导航设计与模式.docx
- UI设计师-UI设计模式与组件库-Apple Human Interface Guidelines_多语言与地区适配.docx
- UI设计师-UI设计模式与组件库-Apple Human Interface Guidelines_反馈与过渡动画.docx
- UI设计师-UI设计模式与组件库-Apple Human Interface Guidelines_可访问性设计.docx
- UI设计师-UI设计模式与组件库-Apple Human Interface Guidelines_控制与交互元素设计.docx
- UI设计师-UI设计模式与组件库-Apple Human Interface Guidelines_视觉设计基础.docx
文档评论(0)