上一篇写到观察者模式。这一篇博文讲另一种设计模式:代理模式。
代理模式的目的是:对其他对象提供一种代理以控制对这个对象的访问。
代理模式有很多种,使用场景。
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)的代理类。
同样的,吕秀才也可以让李大嘴替自己做一顿饭。
选择不同的代理就可以得到真实类的不同代理效果。

代理模式的代码很少,看似简单。但是运用起来有很多方式,就像代理模式的使用场景一样繁多。需要程序员们在实战中写出良好的代码。

更多相关文章

  1. Android(安卓)代理模式
  2. 浅学设计模式之观察者模式及在android中的应用
  3. activity的几种启动模式
  4. Android中Context相关知识整理
  5. 升级Android(安卓)Studio3.0遇到Unable to resolve dependency f
  6. java获取http:图片下载代码——android基础编
  7. android开发技术
  8. android ndk jni层访问java对象小结
  9. Android(安卓)sqlite3插入速度优化方案

随机推荐

  1. Android 布局之TableLayout
  2. Android百度地图——定位SDK(版本v3.1)(一)
  3. 使用 Android(安卓)实现联网
  4. 【android】AsyncTask完全剖析(二)
  5. Android 仿微信Activity左右切换 【全局
  6. 【Android开发学习02】Android应用程序的
  7. 使用android studio 查看 android 的源代
  8. Android Studio和Eclipse快捷键对比,及快
  9. android 字符串、颜色和尺寸
  10. Android中添加思源字体/NotoSansCJK/Sour