必知必会的设计模式8

代理模式(Proxy Pattern)

属结构型设计模式,「为其他对象提供一种代理以控制对这个对象的访问」。

代理模式也蛮常用的,例子就不举了,生活中也很常见,理解的关键是要知道这里有两个对象在参与,一个是代理类对象,一个是普通对象;还要知道两者的关系,即代理类对象控制普通对象的访问。那具体怎么控制呢?从最基础的设计思想上看,就是普通对象能做什么,代理类对象也能做什么。

代理模式.jpeg

看图知道,代理类通过持有普通类对象来控制普通类对象的访问,也就是说对高层来说并不直接和普通类对象打交道,而是通过代理类。另外一点是,代理类和普通类都实现同一个接口,这样他们的操作是一致的,或者说代理类能做的更多。

优缺点

  • 职责清晰
  • 因为实现了功能接口,对功能接口的扩展变得容易操作

适用场景

  • 例如找朋友的朋友帮忙,需要朋友做个中介代理一样。类似的场景都可以使用吧。

不过在实际的实现上,建议可以不用基础的写法(也就是上面 uml 图中展现的),可以从下面两种形式进行扩展。

  1. 普通代理
    要求就是高层只能通过访问代理对象,对普通对象不可见。也就是说普通对象只有代理对象知道并且由代理对象创建。这样一来,高层就完全感知不到普通对象了。
  2. 强制代理
    有点和普通代理相反的意思,要求一定要先接触普通对象,但真正要操作是还得通过代理对象,并且只能通过由普通对象提供的代理对象来操作。(这种方式有啥好处吗?难道就是比较骚?)

在 Android 中的使用

书中提到的一点就是 ActivityManagerProxy,它是 ActivityManagerNative 的代理类。

参考内容

「设计模式之禅(第 2 版)」
「Android 源码设计模式解析与实战」

你可能感兴趣的:(必知必会的设计模式8)