代理模式:给某一对象提供代理对象,并由代理对象控制具体对象的引用.

代理,指的就是一个角色代表另一个角色采取行动,就象生活中,一个红酒厂商,是不会直接把红酒零售客户的,都是通过代理来完成他的销售业务的.而客户,也不用为了喝红酒而到处找工厂,他只要找到厂商在当地的代理就行了,具体红酒工厂在那里,客户不用关心,代理会帮他处理.

代理模式涉及的角色: 
1:抽象主题角色.声明了代理主题和真实主题的公共接口,使任何需要真实主题的地方都能用代理主题代替.

2:代理主题角色.含有真实主题的引用,从而可以在任何时候操作真实主题,代理主题功过提供和真实主题相同的接口,使它可以随时代替真实主题.代理主题通过持有真实主题的引用,不但可以控制真实主题的创建或删除,可以在真实主题被调用前进行拦截,或在调用后进行某些操作.

3:真实代理对象.定义了代理角色所代表的具体对象.

下面是代理模式的实现类图: 

 

根据上图的关系,我们可以用客户买红酒来模拟代理模式的实现,

红酒代理商和红酒厂商都有销售红酒的只能,我们可以为他们定义一个共同的抽象主题角色, 

/**
*抽象主题角色,定义了真实角色和代理角色的公共接口
*/
public interface SellInterface{  public Object sell();
}  

接着,我们定义真实主题角色(这里就是红酒工厂),它必须实现了SellInterface接口的. 

/**
*真实主题角色,这里指红酒工厂角色,它实现了SellInterface接口
*/
public class RedWineFactory implements SellInterface{  public Object sell(){  System.out.println("真实主题角色RedWineFactory 被调用了");  return new Object();  }
}  

下面是代理主题角色(这里指红酒代理商),同样,代理主题也必须实现SellInterface接口. 

/**
*代理主题角色,这里指红酒代理商.它除了也要实现了sellInterface接口外,还持有红酒
*厂商RedWineFactory 对象的引用,从而使它能在调用真实主题前后做一些必要处理.
*/
public class RedWineProxy implements SellInterface{  //持有一个RedWineFactory对象的引用  private RedWineFactory redWineFactory;  //销售总量  private static int sell_count = 0;  public Object sell(){  if(checkUser()){//在通过代理主题角色,我们可以在真实主题角色被调用前做一些诸如权限判断的事情  Object obj = redWineFactory.sell();  count ++;//同样,在调用后我们也可以执行一些额外的动作.  return obj ;  }else{  throw new RuntimeException();  }  }  protected boolean checkUser(){  //do something  return true;  }
}  

接下来看看调用代理对象的代码

public static void main(String agr[])
{  SellInterface sell = new RedWineProxy();  sell.sell();
}  

从上面的例子可以看出代理模式的工作方式,首先,因为代理主题和真实主题都实现了共同的接口,这使我们可以在不改变原来接口的情况下,只要用真实主题对象的地方,都可以用代理主题来代替.其次,代理主题在客户和真实主题之间起了一个中介作用,利用这个中介平台,我们可以在把客户请求传递给真实主题之前,做一些必要的预处理. 

java设计模式---代理模式相关推荐

  1. java设计模式代理模式_Java中的代理设计模式

    java设计模式代理模式 代理对象或代理对象为另一个对象提供占位符,以控制对该对象的访问. 代理充当原始对象的轻量级版本或简化版本. 它支持与原始对象相同的操作,但可以将那些请求委托给原始对象以实现它 ...

  2. Java设计模式(代理模式-模板方法模式-命令模式)

    Java设计模式Ⅴ 1.代理模式 1.1 代理模式概述 1.2 静态代理 1.2.1 静态代理概述 1.2.2 代码理解 1.3 动态代理之JDK代理 1.3.1 动态代理之JDK代理概述 1.3.2 ...

  3. Java设计模式-代理模式笔记

    代理模式 0 什么是代理模式 理解方式1 理解方式2 1 静态代理 1.1 代码实现 1.2 方法解读 1.3 优缺点 2 动态代理 2.1 具体实现 2.2 方法解读 2.3 注意 3 Cglib代 ...

  4. 通俗易懂说java设计模式-代理模式

    基本概念 代理模式,和我们在生活中所理解的"代理"思想并没有太大的区别.代理模式的实现需要我们设计一个代理类,在不直接访问被代理对象的前提下,通过代理类实现对被代理对象的间接访问, ...

  5. JAVA设计模式--代理模式(静态)

    目录 一.什么是代理模式 二.静态代理模式的结构 三.静态代理模式应用举例 应用一 应用二 四.代理模式的应用场景 五.静态代理模式的特点 一.什么是代理模式 代理(Proxy)模式为其他对象提供一种 ...

  6. Java设计模式—代理模式

    1. 什么是代理模式? 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问. 2. 代理模式有什么好处? 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标 ...

  7. java设计模式-代理模式初探

    根据圣思园的视频,整理的java代理模式. 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问. 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间 ...

  8. JAVA设计模式 - 代理模式

    在对象的一个业务方法完成之后, 有时候我们可能需要去添加一些新的功能(前置校验等). 但我们又不想更改原来的代码 , 代理模式就为我们提供了一种解决方案 . 1 . 代理模式的定义 代理模式就是在不改 ...

  9. Java设计模式——代理模式

    文章目录 1.简介 2.推荐实现案例 3.优缺点 3.1 优点 3.2 缺点 4.应用场景 5.注意事项 6.拓展 6.1 普通代理 6.2 强制代理 6.3 代理类的个性 6.4 动态代理 7.最佳 ...

  10. Java设计模式--代理模式

    1. 代理模式的引入 王大爷借了小李1.5亿,小赖是个无赖横竖就是不还钱,王大爷身子弱讨不回钱就请了讨债公司的小强,最后小强通过一系列**(过于残暴被打码了)的手段帮助王大爷讨回欠款.完事后还帮王大爷 ...

最新文章

  1. 如何使用python画折线图-Python数据可视化:使用Python画柱状图和折线图
  2. 只会linux和sql能维护mes系统么,MES系统软件架构介绍
  3. WireShark抓DNS请求和回复数据报的分析
  4. 走进新华三解决方案 360°业务能力中心,读懂新华三如何助力企业数字化转型
  5. 解决Windows Server 2008 System4进程占用80端口 net stop http
  6. GNU Emacs的终极扩展管理工具 — el-get
  7. 2014 Louis Vuitton 40769 apricot NevadaJack Nicklaus
  8. 涨姿势系列之——内核环境下花式获得CSRSS进程id
  9. 如何禁用 7 个完全不必要的设置来优化 Mac?
  10. C++ 运算符重载四(自定义数组类)
  11. PaddleDetection算法分析(7)
  12. 新网银行模型竞赛点评-小微风控算法大赛-早期风险识别
  13. Matlab数学建模学习报告(一)
  14. 手机dlna到linux,linux dlna服务器
  15. springboot+vue疫情管理大作业
  16. CSO是什么?这家年增长48%的企业级软件公司告诉你
  17. 初谜无钢圈内衣,女性健康的好选择
  18. 学习java第6天 模仿XP画板(10%)
  19. matlab用牛顿迭代法求解方程,牛顿迭代法求方程解 程序如下
  20. 视频点播技术android,基于Android机顶盒VOD视频点播系统的设计与实现

热门文章

  1. 给网站增加https的简单方法
  2. Elixir 1.3带来新的语言功能、API和改进后的工具
  3. FGPA 双向 IO 自动方向控制
  4. 华为--PPP典型配置举例
  5. 解决 DNS general: warning: *** POKED TIMER ***
  6. 解决在AX 2009中删除公司时提示:未授权用户##删除表“DEL_PBATRANSLATECONSISTOF”中的记录...
  7. mesos+marathon平台搭建
  8. 高考来了_大数据能做些什么?
  9. 关于web.xml的格式
  10. 标准博客 API .BLOG APIS