Android(安卓)内功心法(1.4)——android常用设计模式之代理模式
上一篇写到观察者模式。这一篇博文讲另一种设计模式:代理模式。
代理模式的目的是:对其他对象提供一种代理以控制对这个对象的访问。
代理模式有很多种,使用场景。
1,远程代理。为一个对象在不同的地址空间提供一个局限性的代表。这样可以隐藏一个对象存在于不同地址空间的事实。
外部使用这个局限性的代表,而不知道真实的对象存在于哪里。
2,虚拟代理。如果一个对象开销很大,可以创建这个对象的代理来存放实例化需要很长时间的这个对象。
3,安全代理。用来控制真实对象访问时的权限。一般用于对象需要不同的访问权限的时候。
4,智能指引。当调用真实对象的时候,代理处理另外一些事情。
先来看一张代理模式的结构图。引用自《大话设计模式》一书中的机构图。
先通过上图来了解大概的代理模式的运行模式。接下来上代码:
/** * 定义了RealSubject和Proxy的公共接口。 * 这样就使任何使用RealSubject的地方否可以使用Proxy */public abstract class Subject { public abstract void request();}
定义一个处理逻辑类和代理类公用的抽象类,也可以是接口。
/** *真正需要处理逻辑的类 */public class RealSubject extends Subject { @Override public void request() { //逻辑处理,一般为数据请求 }}
处理逻辑的类
/** * 代理需要处理逻辑的类(RealSubject)来提供一个对外的接口 */public class Proxy extends Subject { private RealSubject realSubject; @Override public void request() { if (realSubject == null) { realSubject = new RealSubject(); } realSubject.request(); }}
具体处理逻辑的代理类,提供对外的接口和方法。
/** * 运用方法 */public class test { private void test() { //Proxy和RealSubject同样继承了Subject接口。所以,Proxy是RealSubject的代理类 Proxy proxy = new Proxy(); proxy.request();//执行proxy的request的方法的时候,其实执行的是RealSubject的request的方法,只不过程序是不知道的 }}
得到的效果就是,当我们执行proxy的request方法的时候,其实是执行的RealSubject的request的方法。
让proxy类代理了RealSubject需要做的一些事情。同时,RealSubject也可以有多个代理类,每个代理类可以做不同的逻辑处理,这样,需要什么样的逻辑处理就实例化相对应的代理类。
例如,《武林外传》中吕秀才让燕小六替自己去向郭芙蓉求婚。
这个时候,燕小六(proxy)就是吕秀才(RealSubject)的代理类。
同样的,吕秀才也可以让李大嘴替自己做一顿饭。
选择不同的代理就可以得到真实类的不同代理效果。
代理模式的代码很少,看似简单。但是运用起来有很多方式,就像代理模式的使用场景一样繁多。需要程序员们在实战中写出良好的代码。
更多相关文章
- Android(安卓)代理模式
- 浅学设计模式之观察者模式及在android中的应用
- activity的几种启动模式
- Android中Context相关知识整理
- 升级Android(安卓)Studio3.0遇到Unable to resolve dependency f
- java获取http:图片下载代码——android基础编
- android开发技术
- android ndk jni层访问java对象小结
- Android(安卓)sqlite3插入速度优化方案