结构性模式的名称、定义、学习难度和使用频率如下表所示:
1.如何理解代理模式
-
代理模式(Proxy Pattern):给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式是一种对象结构型模式。
-
代理模式类型较多,其中远程代理、虚拟代理、保护代理等在软件开发中应用非常广泛。在Java RMI、EJB、Web Service、Spring AOP等技术和框架中都使用了代理模式。
2.常见的代理模式有哪些?
-
远程代理:为一个位于不同地址空间的对象提供本地代表。比如,在分布式系统中,客户端通过远程代理来访问远程服务器上的对象。
-
虚拟代理:根据需要创建开销很大的对象。例如,在图片加载的场景中,先显示一个占位图,真正需要显示图片时再加载实际的图片对象。
-
保护代理:基于不同权限控制对原始对象的访问。比如,在一个数据库访问的场景中,原始对象是数据库操作的接口,而保护代理会在接收到访问请求时,检查请求者的身份和权限。如果请求者没有足够的权限执行某些数据库操作(如删除数据、修改关键配置等),保护代理会拒绝该请求,只允许执行其权限范围内的操作(如读取数据、添加非关键记录等)。
-
智能引用代理:在访问对象时执行额外的操作,例如引用计数、记录访问日志等。
3.如何理解代理模式中的远程代理?
-
主要用于解决在不同的地址空间(通常是在不同的机器或进程中)访问对象的问题。
-
比如,一个在线银行系统,服务器端有处理账户操作的对象。客户端通过远程代理发送请求,如查询余额、转账等,远程代理将请求序列化后通过网络发送到服务器,服务器处理后将结果返回,远程代理再将结果反序列化并提供给客户端。
-
远程代理隐藏了网络通信、数据序列化等复杂的底层细节,让客户端感觉就像是在本地直接操作对象一样。
4.如何理解代理模式中的虚拟代理?
-
用于在需要时才创建或加载 “昂贵” 的对象,以提高性能和资源利用效率。
-
例如我们正在浏览一个网页,页面上有很多图片。但一次性加载所有图片会消耗大量的网络带宽和时间,导致页面加载缓慢。这时就可以使用虚拟代理。
-
虚拟代理的核心思想是延迟对象的创建或初始化,直到真正需要的时候,从而避免不必要的资源消耗和性能下降。
5.代理模式的优缺点
-
优点
-
可以在不修改原始对象的情况下,为对象添加额外的功能,如日志记录、权限控制等,符合开闭原则。
-
降低耦合度:代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度,满足迪米特法则。
-
保护隐私:保护代理可以隐藏原始对象的一些敏感信息和操作,保护其不被不当访问。
-
提高性能:例如虚拟代理可以实现延迟加载,从而提高系统的性能和响应速度。
-
-
缺点
-
增加复杂性:引入代理对象会增加系统的复杂性,特别是在多层代理的情况下。
-
由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢,例如保护代理。
-
6.代理模式的适用场景
-
远程对象访问:当需要访问位于远程服务器上的对象时,使用远程代理来隐藏网络通信的细节。
-
虚拟资源加载:如前面提到的图片、大型文件或复杂数据的延迟加载,使用虚拟代理来优化性能。
-
权限控制:对某些敏感对象或操作进行权限验证,只有符合权限的请求才能通过保护代理访问实际对象。
-
日志记录与监控:在对象方法调用前后进行日志记录或性能监控,通过代理来添加这些额外功能。
-
智能引用:例如实现对象的引用计数,通过代理来管理对象的生命周期。
以上内容为根据书本内容配合搜索引擎整理得来,目的是为了学习,要是有侵权的情况发生,请联系我,我会立即予以删除,谢谢!
一起成长,人生是马拉松,可以跑得慢,但一定要在路上。