代理模式相对来讲比较简单和容易理解.

一, 代理模式(Proxy)的定义

教材里定义很简单:

所谓代理模式, 就是为其他对象提供一种代理控制对这个对象的访问.

上面出现了3个名词:

1.其他对象

2.一种代理

3.这个对象

实际上就是:

这个对象 找了 一种代理来 避免其他对象的访问

二, 代理模式的例子

例如有个狐狸揍1个只狗, 给它1个闷棍, 再1个上勾拳.

但是狐狸不想自己去, 是怕被寻仇.

简单来讲, 就是狐狸想揍狗, 但是不想让狗知道狐狸要揍他.

所以狐狸找了熊来做代理...  就是让熊去揍狗..

熊对狐狸说: 我不会揍狗的技能啊,

狐狸对熊说: 你用我的技能就可以了.

揍狗接口 Hitable<T>:

public interface Hitable<T> {public void hit(T o);
}

狗类Dog:

public class Dog {private String name;public Dog(String name){this.setName(name);}public String getName() {return name;}public void setName(String name) {this.name = name;}}

狐狸类Fox:

狐狸实现了揍狗接口:

public class Fox implements Hitable<Dog> {@Overridepublic void hit(Dog g){this.sap(g);this.uppercut(g);}//闷棍private void sap(Dog g){System.out.println("give " + g.getName() + " a Sap!");}//上勾拳private void uppercut(Dog g){System.out.println("give " + g.getName() + " a Uppercute!");}}

就是给狗1个闷棍 + 上钩拳啦

熊类ProxyBear:

为了揍狗, 熊也要实现揍狗接口..

但是熊实际上用的是狐狸的技能来揍狗.

package proxyPattern;
public class ProxyBear implements Hitable<Dog>{
private Hitable<Dog> f = null;
public ProxyBear(){
if (null == f){
f = new Fox();
}
}
@Override
public void hit(Dog g){
if (null != f){
System.out.println("Bear hit InterDogChicke!");
f.hit(g);
System.out.println("Bear bite InterDogChicke!");
}
}
}

客户端代码:

                Dog g = new Dog("InterDogChicken");ProxyBear b = new ProxyBear();b.hit(g);

输出:

Bear hit InterDogChicke!
give InterDogChicken a Sap!
give InterDogChicken a Uppercute!
Bear bite InterDogChicke!

看上去就好像一只熊把狗揍了,  隐藏了狐狸了这个存在.

也就是狗不知道实际上狐狸在揍它..

实际上, 这个模式也加入了熊自己的技能... 相当与对狐狸技能的增强!

UML:

三,代理模式的一般用途

1. 远程代理:

就是未1个对象在不同的地址空间提供局部代理.  隐藏这个对象存在与另1个地址空间的事实.

2.虚拟代理:

根据需要创建开销很大的对象, 通过虚拟代理来存放实例化需要很长时间的真实对象.

3.安全代理

用来控制对真实对象访问的权限.(也就是本文例子, 狗只能找熊谈谈, 不会直接找狐狸)

代理模式(Proxy)简介相关推荐

  1. 二十四种设计模式:代理模式(Proxy Pattern)

    代理模式(Proxy Pattern) 介绍 为其他对象提供一个代理以控制对这个对象的访问. 示例 有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这 ...

  2. Java24种设计模式(第二种)--代理模式(Proxy Pattern)

    Java24种设计模式 (第二种) 一.代理模式(Proxy Pattern) 模式逻辑: 什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道 被代理人能做哪些事 ...

  3. 二十三种设计模式(第十二种)-----代理模式(Proxy)

    二十三种设计模式(第十二种)-----代理模式(Proxy) 尚硅谷视频连接https://www.bilibili.com/video/BV1G4411c7N4?from=search&se ...

  4. [Java] 代理模式 Proxy Mode

    [Java] 代理模式 Proxy Mode 文章目录 [Java] 代理模式 Proxy Mode 1. 代理思想 2.java.lang.reflect.Proxy类 2.1 利用反射创建prox ...

  5. 设计模式——代理模式(Proxy Pattern)之为别人做嫁衣

    代理模式Proxy Pattern 代理模式 1.背景 2.定义 3.特征 4.应用场景 5.实验案例 参考 代理模式 1.背景 假如说我现在想租一间房子,虽然我可以自己去找房源,做卫生检测等一系列的 ...

  6. 设计模式-代理模式(Proxy Pattern)

    设计模式-代理模式(Proxy Pattern) 文章目录 设计模式-代理模式(Proxy Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.小结 六.动态代理 ...

  7. js设计模式——代理模式proxy

    什么是代理模式 代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问. (可以想象一下明星与经纪人的关系,明星是请求的本体,经纪人就是代理proxy) 如何实现代理模式 代理对象内部含有对本 ...

  8. 人人都会设计模式---代理模式--Proxy

    教程大纲 版权声明:本文为博主原创文章,未经博主允许不得转载 PS:转载请注明出处 作者: TigerChain 地址: www.jianshu.com/p/1b3b6b003- 本文出自 Tiger ...

  9. 05、人人都会设计模式:代理模式--Proxy

    PS:转载请注明出处 作者: TigerChain 地址: http://www.jianshu.com/p/1b3b6b003032 本文出自 TigerChain 简书 人人都会设计模式 教程简介 ...

最新文章

  1. FastDFS之Linux下搭建
  2. 【原】Sharepoint安装:此服务器不是该搜索应用程序的索引器
  3. AI Fintech 驱动智能金融时代到来
  4. 一次回母校教前端的经历
  5. 腾讯IVWEB前端工程化工具feflow思考与实践
  6. Centos系统普通用户开启sudo命令
  7. (45)FPGA面试技能提升篇(Hyperlink接口)
  8. 基于matlab模糊pid控制系统,基于MATLAB的模糊自适应PID控制器的设计
  9. 博文视点Open Party——PPT演示专家秘技 报名中
  10. Introduction to Conditional Random Fields
  11. 如果希望点击父控件子控件也响应的话, 可以给子控件加如下属性:  android:duplicateParentState=true...
  12. 【Css】Css实现DIV半透明效果(示例)
  13. oracle交接单,系统交接单模板.docx
  14. 扫雷小游戏 纯C语言/C++开发分享成果和记录
  15. notepad拼心形_Excel心形函数v1.0 免费版
  16. 网易邮箱注册HTML+CSS
  17. 鸿蒙之下分城如果建设,率土之滨:分城数量不再限制,戍城、金虎台、拜将台让战斗更激烈...
  18. 计算机微程序流程图,基于微程序控制器的《计算机系统综合设计》课程设计指导书.doc...
  19. [句子成分] 三、宾语
  20. NLP:Word Embedding词嵌入/word2vec词向量思想方法(一种主流的分布式表示)的简介、使用方法、案例应用之详细攻略

热门文章

  1. 密码技术应用--RSA文件签名验签
  2. 【漫天烟花】绚烂烟花点亮夜空也太美了叭、某程序员携带烟花秀给大家拜年啦~
  3. android/linux中的第一个init程序的启动
  4. optee3.8 qemu_v8的环境搭建篇
  5. 基于策略的一种高效内存池的实现
  6. c语言定义可变长度的数组,有没有办法在c中创建一个可变长度数组全局?
  7. 2020-11-28(不定参数的函数)
  8. 【Web安全】一款功能强大的Web身份认证测试框架
  9. C. Woodcutters【贪心】
  10. C++中函数的默认参数