控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限。
缓冲代理(Cache Proxy)
为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。
智能引用代理(Smart Reference Proxy)
当一个对象被引用时,提供一些额外的操作,例如将对象被调用的次数记录下来等。
使用场景
代理模式的类型较多,不同类型的代理模式有不同的优缺点,它们应用于不同的场合:
-
当客户端对象需要访问远程主机中的对象时可以使用远程代理。
-
当需要用一个消耗资源较少的对象来代表一个消耗资源较多的对象,从而降低系统开销、缩短运行时间时可以使用虚拟代理,例如一个对象需要很长时间才能完成加载时。
-
当需要为某一个被频繁访问的操作结果提供一个临时存储空间,以供多个客户端共享访问这些结果时可以使用缓冲代理。通过使用缓冲代理,系统无须在客户端每一次访问时都重新执行操作,只需直接从临时缓冲区获取操作结果即可。
-
当需要控制对一个对象的访问,为不同用户提供不同级别的访问权限时可以使用保护代理。
-
当需要为一个对象的访问(引用)提供一些额外的操作时可以使用智能引用代理。
程序猿实例
简单的实例:
如下图片结构就是一个代理模式的UML图:
如下是一个入门代理模式的简单示例,遵循了代理模式的几大核心模块。我们以程序猿买 港版MacBook为例来说明代理模式。
package yanbober.github.io;
//抽象对象角色
interface IMacBook {
void buyIt();
}
//目标对象角色
class HangKangMacBook implements IMacBook {
@Override
public void buyIt() {
System.out.println(“This computer is from HangKang!”);
}
}
//代理对象角色
class ProxyMacBook implements IMacBook {
@Override
public void buyIt() {
HangKangMacBook mac = new HangKangMacBook();
mac.buyIt();
}
}
//客户端
public class Main {
public static void main(String[] args) {
IMacBook macBook = new ProxyMacBook();
macBook.buyIt();
}
}
在Android中的一个代理模式运用实例:
在Android中代理模式也是使用广泛的,例如ActivityManagerProxy类就是一个代理,它是ActivityManagerNative的代理,也就是说ActivityManagerProxy是上面所说的Proxy类,而ActivityManagerNative就相当于RealSubject类,它们都有一个共有的接口IActivityManager。在这里还有一个重要的类:ActivityManager,它相当于代理模式的类图中的client。在这个类中,可以看到大量的getxxx函数,这些函数,都会调用到ActivityManagerNative类的getDefault()方法,而该方法会获得一个共用的单例的IActivityManager引用,然后通过多态来调用代理中的实现。
总结一把
代理模式优点:
-
能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。
-
客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵活性和可扩展性。
-
远程代理为位于两个不同地址空间对象的访问提供了一种实现机制,可以将一些消耗资源较多的对象和操作移至性能更好的计算机上,提高系统的整体运行效率。
-
虚拟代理通过一个消耗资源较少的对象来代表一个消耗资源较多的对象,可以在一定程度上节省系统的运行开销。
-
缓冲代理为某一个操作的结果提供临时的缓存存储空间,以便在后续使用中能够共享这些结果,优化系统性能,缩短执行时间。
-
保护代理可以控制对一个对象的访问权限,为不同用户提供不同级别的使用权限。
代理模式缺点:
-
由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢,例如保护代理。
-
实现代理模式需要额外的工作,而且有些代理模式的实现过程较为复杂,例如远程代理。
【工匠若水 http://blog.csdn.net/yanbober】 继续阅读《设计模式(行为型)之观察者模式(Observer Pattern)》http://blog.csdn.net/yanbober/article/details/45484749
最后
文章不易,如果大家喜欢这篇文章,或者对你有帮助希望大家多多点赞转发关注哦。文章会持续更新的。绝对干货!!!
- Android进阶学习全套手册
关于实战,我想每一个做开发的都有话要说,对于小白而言,缺乏实战经验是通病,那么除了在实际工作过程当中,我们如何去更了解实战方面的内容呢?实际上,我们很有必要去看一些实战相关的电子书。目前,我手头上整理到的电子书还算比较全面,HTTP、自定义view、c++、MVP、Android源码设计模式、Android开发艺术探索、Java并发编程的艺术、Android基于Glide的二次封装、Android内存优化——常见内存泄露及优化方案、.Java编程思想 (第4版)等高级技术都囊括其中。
-
Android高级架构师进阶知识体系图
关于视频这块,我也是自己搜集了一些,都按照Android学习路线做了一个分类。按照Android学习路线一共有八个模块,其中视频都有对应,就是为了帮助大家系统的学习。接下来看一下导图和对应系统视频吧!!!
-
Android对标阿里P7学习视频