今天上午趁着老板不在偷偷在网上又温习了一下代理模式,这种偷着公司时间拿来学习的感觉真过瘾,就像我的偶像“白百何事件”一样!其实,对于白百何这件事情我觉得挺正常。我们之所以觉得不正常,而且新闻上的头条啊??!疑问就处在她的身份太不普通。至少,唉!比我苦逼写代码强多了~  binggo!回归正题吧,别再操心别人的闲事了!!白百何,我支持你。

其实说到代理模式,我印象里都不咋使用它!但是对她,我还是充满了好奇心。

那到底什么是代理模式麽??代理模式是给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。(代理模式使用代理对象完成用户请求,屏蔽用户对真实对象的访问。)

举例说明:就是我的玛莎拉蒂跑车被偷,并且猫贼已经被逮到。我要起诉她!碍于面子地位和法律专业知识,我请了一名大律师帮我处理这件事!而律师(代理)可以在我(委托人)和猫贼(目标对象)之前起到中介的作用。

作为天真的代理模式,她有:静态代理、动态代理

静态代理特点:所谓静态代理就是程序运行前就已经存在的编译好的代理类。(缺点:有时候会显得非常麻烦,不灵活)

动态代理特点:它不用在我们设计实现的时候,就指定某一个代理类来代理哪一个被代理对象。可以把这种指定延迟到程序运行时,并由JVM来实现。(优点:1、减少编程的工作量:假如需要实现多种代理处理逻辑,只要写多个代理处理器就可以了,无需每种方式都写一个代理类。2、系统扩展性和维护性增强,程序修改起来也方便多了!一般只要改代理处理器类就行了。)

静态

public interface IProxyListener {//代理接口 实现打官司功能(首先创建一个打官司行为的接口)String lawRequest(String lawInfo);
}
//客户(委托人)
public class Client implements IProxyListener{public void prepareWork(){//自己维权 为打官司做准备 (耗时操作)//有可能打官司前期准备要耗时几个月System.out.println("打官司~做准备~耗时");}@Overridepublic String lawRequest(String lawInfo) {String doing = "正在打官司!";return doing;}
}
///律师 (代理)
public class Lawyer implements IProxyListener {private Client client;public Lawyer(Client client) {//通过代理模式实现代理者对委托人的权限控制//初始化代理类,接受客户端打官司委托;// 而非真实的为客户打官司,其实律师(代理类)什么都没有做。// 不像客户一样,并没有进行耗时任务操作,减少资源消耗。//当客户要真正进行打官司,则会去调用方法lawRequest(String lawInfo)this.client = client;}@Overridepublic String lawRequest(String lawInfo) {//准备工作client.prepareWork();//律师(代理) 代理 用户(委托人)打官司return client.lawRequest(lawInfo);}
}
//    main实现方法public static void main(String[] args){//实现用户或者客户的打官司工作 全权交给律师 代理完成Lawyer lawyer = new Lawyer(new Client());lawyer.lawRequest("开始打官司");}

动态

public interface IProxyListener {//代理接口 实现打官司功能(首先创建一个打官司行为的接口)String lawRequest(String lawInfo);
}
//客户(委托人)
public class Client implements IProxyListener{public void prepareWork(){//自己维权 为打官司做准备 (耗时操作)//有可能打官司前期准备要耗时几个月System.out.println("打官司~做准备~耗时");}@Overridepublic String lawRequest(String lawInfo) {String doing = "正在打官司!";return doing;}
}
//动态代理 具备普遍性
public class ClientProxyHandler implements InvocationHandler {// 委托人(被代理类)的实例private Object client;// 将被代理者的实例传进动态代理类的构造函数中// 通过代理模式实现代理者对委托人的权限控制public ClientProxyHandler(Object client){this.client = client;}/*** 重写 InvocationHandler 接口中的 invoke() 方法* 更重要的是,动态代理模式可以使得我们在不改变原来已有的代码结构* 的情况下,对原来的“真实方法”进行扩展、增强其功能,并且可以达到* 代替委托人执行行为,下面的before、after就是我们可以进行特殊* 代码切入的扩展点了。*/@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//before:do something TODO: 2017/4/13Object ob = method.invoke(this.client, args);// after:do something TODO: 2017/4/13return ob;}
}
   public static void main(String[] args){//创建真实委托人对象Client client = new Client();//委托人 授权 代理 ;交接个人权力ClientProxyHandler handler = new ClientProxyHandler(client);/** 通过类Proxy的方法 newProxyInstance创建代理对象* 第一个参数 handler.getClass().getClassLoader() ,使用handler类的ClassLoader对象来加载代理对象* 第二个参数 client.getClass().getInterfaces(),为代理对象提供的接口是委托人所施行行为的接口,表示律师代理的是委托人。接下来就能调用接口中的方法实现各种行为手段了;* 第三个参数handler, 我们这里将这个代理对象关联到了上方的 InvocationHandler 这个对象上*/IProxyListener iProxyListener = (IProxyListener) Proxy.newProxyInstance(handler.getClass().getClassLoader(),client.getClass().getInterfaces(),handler);iProxyListener.lawRequest("立即打官司~");}

附图理解:经典博客链接< https://www.zybuluo.com/pastqing/note/174679>

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. debian apt-get 国内常用 镜像源
  2. 考前自学系列·计算机组成原理·存储器画图
  3. 新浪微博API OAuth 2 Python客户端
  4. git git 查看远程库_如何从Git远程存储库中提取
  5. Android 系统(147)---proc—cpufreq
  6. 高中计算机算计Access怎么做,Access非常简单实用的计算器
  7. LeetCode(682)——棒球比赛(JavaScript)
  8. vvv在线文档导出工具_使用ApiPost工具快速生成在线接口文档
  9. linux手机摩托,[图]摩托罗弹奏Linux顺手机的前生
  10. 代码管理学:域名、产品名、应用名等都不是你能决定的,要上报备案
  11. DLLPasswordFilterImplant:DLL密码过滤器
  12. 从单个静止图像进行 3d 深度重建(论文2007)
  13. FPGA之通信算法工程师面试题3
  14. INT 10H显示字符串的小例子
  15. 如何解决360的导航一直绑定为首页(亲测有效)
  16. java-练习题-黄金分割点
  17. 使用sh_metutil生成采样300秒的ztd
  18. 基于asp.net344运输公司车辆调度管理系统
  19. 中国科学院计算机所研究生实习,在中科院计算所实习的一年(更新中。。)
  20. 8则使用的Linux Shell命令

热门文章

  1. 【软件工程】Jackson图概念+优点缺点+改进的Jackson图+实例
  2. MFC 窗口句柄,窗口ID,窗口指针
  3. 局域网共享工具_AppStore今日推荐分享 支持局域网设备共享的抓包工具
  4. 非线性邻域滤波(NNFs)在MR-FBP图像重建算法中的应用(基于astra-toolbox开发, 实现双边滤波,非局部均值滤波(NLM)的惩戒项的改进,并进行MAE,MAR分析)
  5. 滴!请查收携程机票增值会员团队的一年敏捷账单
  6. php time 毫秒_PHP microtime()函数获取毫秒时间戳
  7. 《怦然心动——情感化交互设计指南(修订版)》一第1章 为什么要让交互诱人...
  8. 基于Vue的新拟态ToDoList(待办事项添加)
  9. linux底层驱动内核,Linux底层驱动开发需要学习哪些内容
  10. 解决android studio模拟器不显示应用问题