码迷,mamicode.com
首页 > 其他好文 > 详细

代理模式

时间:2019-10-27 01:02:47      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:远程   作用   隐私   this   技术   响应   override   out   返回   

      其实,代理模式在生活中的应用很多,典型的例如明星的经纪人,外界与明星的联系都由经纪人来负责,什么电话该接进来,什么活动该拒绝都交给经纪人,这样在最大程度上保护了明星的隐私。这种模式也符合单一职责约束,明星只用做好自己的事情,其他的琐事经纪人会搞定的。

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设计模式>>

<<大话设计模式>>

代理模式

标签:远程   作用   隐私   this   技术   响应   override   out   返回   

原文地址:https://www.cnblogs.com/NaLanZiYi-LinEr/p/11746272.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!