代理模式
Posted nalanziyi-liner
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代理模式相关的知识,希望对你有一定的参考价值。
其实,代理模式在生活中的应用很多,典型的例如明星的经纪人,外界与明星的联系都由经纪人来负责,什么电话该接进来,什么活动该拒绝都交给经纪人,这样在最大程度上保护了明星的隐私。这种模式也符合单一职责约束,明星只用做好自己的事情,其他的琐事经纪人会搞定的。
1. 案例场景
下面,我们就来用代码模拟一下明星和经济人的场景,从而了解代理模式的具体用法。
作为利益共同体,经纪人和明星需要具有共同的行为,只不过真正做事的是明星,经纪人负责传话,因此他们需要一个共同Activiey接口:
public interface Activity { public void interview(); public void arietyShow(); }
明星类:
public class Star implements Activity{ @Override public void interview() { System.out.println("明星接受采访。。。"); } @Override public void arietyShow() { System.out.println("明星参加综艺节目。。。"); } }
经纪人类:
public class Agent implements Activity{ Star star; public Agent(Star star){ this.star = star; } @Override public void interview() { this.star.interview(); } @Override public void arietyShow() { this.star.arietyShow(); } }
接下来就可以模拟一下明星-经纪人这种代理场景的运作了:
public class ProxyTest { public static void main(String[] args) { Agent agent = new Agent(new Star()); agent.arietyShow(); agent.interview(); } }
输出为:
明星参加综艺节目。。。
明星接受采访。。。
2. 概念定义
上面简单介绍了代理模式的概念和具体场景的使用,那么,代理模式的正式定义是怎样的呢,Gof四人组给出的定义是:
代理模式为对象提供一个替身,从而控制对这个对象的访问。
外界的请求通过代理到达实际对象,实际对象的响应通过代理返回给外界。代理模式一个明显的优点是限制外界对对象的访问,从而起到保护对象的作用,缺点是增加了复杂性,而且由于需要代理做转换,增加了调用链的长度。
3. UML结构
将明显-经纪人的结构抽象出来,就可以得到代理模式的一般结构,如下:
4. 结论
当由于某种原因不能将对象直接暴露给外界时,或者需要限制对对象的访问时,就可以考虑使用代理模式。本文介绍的代理模式是基于代理对象和实际对象在同一个JVM堆上的情形,除此之外,代理模式还有以下几种:
- 远程代理:控制对远程对象的访问
- 虚拟代理:控制对创建开销较大的资源的访问
- 保护代理:基于权限控制对资源的访问
- 其他的类型就不一一列举了。。。
5. 参考
<<Head First设计模式>>
<<大话设计模式>>
以上是关于代理模式的主要内容,如果未能解决你的问题,请参考以下文章