代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式:
  人如其名,代理相信大家都可以经常看到什么什么代理,现实中代理太多了。感受最真实的是火车票的代理,经常可以在街上看到,你买票的是在代理商买的,但是付的钱依然会交给铁大哥,这就是代理。现实中的你可能会接触的例子就是叫同学去给你买票,实际上不是你去买,但是是票是你的。这也是代理。
代理模式组成:
  抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
  代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
  真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
代理的UML图
  
代理的优点:
  (1).职责清晰 真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。叫你去买票,我管你有没有摔跤撒的,不需要关注这种问题。
  (2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。别人在路上一看,以为是你同学要买票去哪里,实际上买的是你的,保护了你。
  (3).高扩展性 只要符合火车站规定的人,同学都可以去代人买票。
下面就用代码来实现着一个过程。
 package com.roc.prory;

 /**
* 定义一个种类的人 抽象角色
*
* @author liaowp
*
*/
public interface Person { /**
* 可以去火车站买票
*/
public void buyTicket(); }
package com.roc.prory;
/**
* 小王 代理角色
* @author liaowp
*
*/
public class XiaoWang implements Person { private Person person = null;//默认就是一个人 public XiaoWang(){//小王比较聪明,知道带别人买票赚钱。默认是只赚小明的钱
this.person = new XiaoMing();
} public XiaoWang(Person per){//赚小明的不够,只要是人就赚。
this.person = per;
} /**
* 小王也是人,也可以去买票。
*/
public void buyTicket() {//调不然方法去买票,代理商
this.person.buyTicket();
} }
package com.roc.prory;

/**
* 小明 真实角色
* @author liaowp
*
*/
public class XiaoMing implements Person { //比较懒 /*
* 小明也是人,也可以去买票。
* @see com.roc.prory.Person#buyTicket()
*/
@Override
public void buyTicket() {
System.out.println("买小明的票");
} }
package com.roc.prory;
/**
* 小丽
* @author liaowp
*
*/
public class XiaoLi implements Person { /**
* 小丽也可以自己买票。
*/
public void buyTicket() {
System.out.println("买小丽的票");
} }
package com.roc.prory;
/**
* 测试代理模式
* @author liaowp
*
*/
public class Client {
public static void main(String[] args) {
XiaoWang xiaoWang = new XiaoWang();//new 的小王
xiaoWang.buyTicket();//小王去买了小明的票,这就是代理 XiaoLi xiaoLi = new XiaoLi();//买票也要有这个人呀。先把小丽 new 出来。
XiaoWang mrWang = new XiaoWang(xiaoLi);//小丽说:小王帮我去买个票呗
mrWang.buyTicket();//屁颠屁颠的跑去买了
}
}

Java设计模式之代理模式的更多相关文章

  1. Java设计模式之代理模式(静态代理和JDK、CGLib动态代理)以及应用场景

    我做了个例子 ,需要可以下载源码:代理模式 1.前言: Spring 的AOP 面向切面编程,是通过动态代理实现的, 由两部分组成:(a) 如果有接口的话 通过 JDK 接口级别的代理 (b) 如果没 ...

  2. java设计模式6——代理模式

    java设计模式6--代理模式 1.代理模式介绍: 1.1.为什么要学习代理模式?因为这就是Spring Aop的底层!(SpringAop 和 SpringMvc) 1.2.代理模式的分类: 静态代 ...

  3. 夜话JAVA设计模式之代理模式(Proxy)

    代理模式定义:为另一个对象提供一个替身或者占位符以控制对这个对象的访问.---<Head First 设计模式> 代理模式换句话说就是给某一个对象创建一个代理对象,由这个代理对象控制对原对 ...

  4. Java设计模式:代理模式(转)

    代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一 ...

  5. Java 设计模式_代理模式(2016-08-19)

    概念: 代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 就是一个人或者机构代表另一个人或者机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一 ...

  6. JAVA设计模式:代理模式&& 装饰模式区别

    在前面学习了代理模式和装饰模式后,发现对两者之间有时候会混淆,因此对两者进行了区别和理解: 装饰模式你可以这样理解,就像糖一样,卖的时候商家大多要在外面包一层糖纸,其实原本还是糖. public in ...

  7. Java设计模式:代理模式(二)

    承接上文 三.计数代理 计数代理的应用场景是:当客户程序需要在调用服务提供者对象的方法之前或之后执行日志或者计数等额外功能时,就可以用到技术代理模式.计数代理模式并不是把额外操作的代码直接添加到原服务 ...

  8. java设计模式之代理模式 ,以及和java 回调机制的区别

    java 代理模式就是: 将自己要做的事交给别人去做(这个别人就是代理者,自己就是被代理者),为什么自己能做的要交给别人去做了?假如一个小学生小明,现在要写作业,但是又想玩游戏,他更想玩游戏,并且不想 ...

  9. Java设计模式之代理模式(Proxy)

    前言: 最近在研究Retrofit开源框架的时候,其主要核心代码是通过注解标示参数,动态代理模式实现具体接口,反射机制进行参数解析,最终实现发送请求.其实之前在学习Xutils源码的时候,Xutils ...

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

    所谓的代理模式就是为其它类或对象提供一个代理以控制对这个对象的访问.那么常见的代理有远程代理,虚拟代理,保护代理,智能代理. 1. 远程代理:为一个不同地址空间的对象提供一个本地代理对象. 2. 虚拟 ...

随机推荐

  1. ENVI数据显示操作【Tools菜单操作1】

    ---恢复内容开始--- 一.Tools菜单命令及其功能 主图像窗口中Tool菜单多对应的下拉菜单共17项命令. 二.窗口链接/覆盖显示 窗口链接和叠加显示(Link和Overlay)是对多幅图像某一 ...

  2. Strip JS – 低侵入,响应式的 Lightbox 效果

    Strip  是一个灯箱效果插件,显示的时候只会覆盖部分的页面,这使得侵扰程度较低,并留出了空间与页面上的大屏幕,同时给予小型移动设备上的经典灯箱体验.Strp JS 基于 jQuery 库实现,支持 ...

  3. HTML5 Canvas 实现的9个 Loading 效果

    Sonic.js 是一个很小的 JavaScript 类,用于创建基于 HTML5 画布的加载图像.更强大的是 Sonic.js 还提供了基于现成的例子的创建工具,可以帮助你实现更多自定义的(Load ...

  4. 15款免费的响应式 WordPress 主题下载

    响应式设计主题最适合杂志网站,博客网站,想要在自己网站上展示自己作品的用户.支持视网膜显示使其在 iPad,iPhone,Mackbook,iMac 等设备上有更高的分辨率. 响应式和现代设计风格的多 ...

  5. HTML表单提交数据中application/x-www-form-urlencoded和multipart/form-data的区别

    在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型. 下边是说明: application/x-www-form-urlen ...

  6. [DeviceOne开发]-地区选择

    一.简介 该demo主要通过do_ComboBox和do_Picker的selectChanged事件,实现省市县三级联动的功能 二.效果图 三.源码地址 https://github.com/do- ...

  7. 强大的<canvas>

    <canvas> 个人认为<canvas>是h5最重量级的新标签了,现在各种h5小游戏都是基于<canvas>的,它为游戏提供了一个功能强大的画布,可在画布上绘制丰 ...

  8. SAP中日期时间函数总结

    1.获得最后一天CALL FUNCTION 'FIMA_DATE_CREATE'  EXPORTING   I_DATE                       = I_DATE "输入 ...

  9. SharePoint Online 创建门户网站系列之定制栏目

    前 言 SharePoint Online自带的库就带有二级页面和详细页面,也就是Allitems页面和DispForm页面,但是实在不够美观,尤其对于门户网站这一企业门面来说,更是无法接受. 下面, ...

  10. 通过Map 3D API读取线状要素的节点坐标

    By Daniel Du 在Map 3D中可以使用Create from Geometry命令把AutoCAD实体转换成Map 3D中的FDO要素,比如可以把AutoCAD的polyline转换成FD ...