4)远程代理介绍
远程代理(Remote Proxy) 使客户端程序可以访问在远程主机上的对象,远程代理对象承担了大部分的网络通信工作,并负责对远程业务方法的调用。
5)虚拟代理介绍
1.概述
虚拟代理(Virtual Proxy) 对于一些占用系统资源较多或者加载时间较长的对象,可以给这些对象提供一个虚拟代理,在真实对象创建成功之前虚拟代理扮演真实对象的替身,而当真实对象创建之后,虚拟代理将用户的请求转发给真实对象。
2.使用场景
- 由于对象本身的复杂性或者网络等原因导致一个对象加载的时间较长,此时可以用一个加载时间相对较短的代理对象来代表真实对象,在实现时可以结合多线程技术,一个线程用于显示代理对象,其他线程用于加载真实对象。
- 当一个对象的加载十分耗费系统资源时,虚拟代理可以让占用大量内存或处理起来非常复杂的对象推迟到使用它们的时候才创建,而在此之前用一个相对占用资源较少的代理对象来代表真实对象,再通过代理对象来引用真实对象,为了节省内存,在第一次引用真实对象时再创建对象,并且该对象可被多次重用,在以后每次访问时需要检测所需对象是否已经被创建,这需要消耗一定的系统时间,但是可以节省内存空间。
6)缓冲代理介绍
缓冲代理(Cache Proxy) 为某一个操作的结果提供临时的缓存存储空间,以便在后续使用中能够共享这些结果,从而避免某些方法的重复执行,优化系统性能。
7)总结
1.优点
-
能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。
-
客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则。
-
远程代理为位于两个不同地址空间对象的访问提供了一种实现机制,可以将消耗资源较多的对象和操作移到性能更好的机器上,提高系统的整体运行效率。
-
虚拟代理通过一个消耗资源较少的对象来代表一个消耗资源较多的对象,可以在一定程度上节省系统的运行开销。
-
缓冲代理为某一个操作的结果提供临时的缓存存储空间,以便在后续使用中能够共享这些结果,优化系统性能。
-
保护代理可以控制对一个对象的访问权限,为不同用户提供不同级别的使用权限。
2.缺点
-
由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢,例如保护代理。
-
实现代理模式需要额外的工作,而且有些代理模式的实现过程较为复杂,例如远程代理。
3.适用场景
-
当客户端对象需要访问远程主机中的对象时可以使用远程代理。
-
当需要用一个消耗资源较少的对象来代表一个消耗资源较多的对象时可以使用虚拟代理。
-
当需要为某一个被频繁访问的操作结果提供一个临时存储空间,以供多个客户端共享访问这些结果时可以使用缓冲代理。
-
当需要控制对一个对象的访问,为不同用户提供不同级别的访问权限时可以使用保护代理。
-
当需要为一个对象的访问(引用)提供一些额外的操作时可以使用智能引用代理。