什么是代理模式呢?

我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道
被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被 代理的人能干活呀。
比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时这样的:
先定义一种类型的女人:

package com.cbf4life.proxy;
/**
* 定义一种类型的女人,王婆和潘金莲都属于这个类型的女人
*/
public interface KindWomen {//这种类型的女人能做什么事情呢?
public void makeEyesWithMan(); //抛媚眼
public void happyWithMan(); //happy what? You know that!
}
一种类型嘛,那肯定是接口,然后定义潘金莲:
package com.cbf4life.proxy;
/**
* 定一个潘金莲是什么样的人
*/
public class PanJinLian implements KindWomen {public void happyWithMan() {System.out.println("潘金莲在和男人做那个.....");
}
public void makeEyesWithMan() {System.out.println("潘金莲抛媚眼");
}
}
再定一个丑陋的王婆:
package com.cbf4life.proxy;
/**
* 王婆这个人老聪明了,她太老了,是个男人都看不上,
* 但是她有智慧有经验呀,她作为一类女人的代理!
*/
public class WangPo implements KindWomen {private KindWomen kindWomen;
public WangPo(){ //默认的话,是潘金莲的代理
this.kindWomen = new PanJinLian();
}
//她可以是KindWomen的任何一个女人的代理,只要你是这一类型
public WangPo(KindWomen kindWomen){this.kindWomen = kindWomen;
}
public void happyWithMan() {this.kindWomen.happyWithMan(); //自己老了,干不了,可以让年轻的代替
}
public void makeEyesWithMan() {this.kindWomen.makeEyesWithMan(); //王婆这么大年龄了,谁看她抛媚眼?!
}
}
两个女主角都上场了,男主角也该出现了:
package com.cbf4life.proxy;
/**
* 定义一个西门庆,这人色中饿鬼
*/
public class XiMenQing {/*
* 水浒里是这样写的:西门庆被潘金莲用竹竿敲了一下难道,痴迷了,
* 被王婆看到了, 就开始撮合两人好事,王婆作为潘金莲的代理人
* 收了不少好处费,那我们假设一下:
* 如果没有王婆在中间牵线,这两个不要脸的能成吗?难说的很!
*/
public static void main(String[] args) {//把王婆叫出来
WangPo wangPo = new WangPo();
//然后西门庆就说,我要和潘金莲happy,然后王婆就安排了西门庆丢筷子的那出戏:
wangPo.makeEyesWithMan(); //看到没,虽然表面上时王婆在做,实际上爽的是潘金莲
wangPo.happyWithMan(); }
}
那这就是活生生的一个例子,通过代理人实现了某种目的,如果真去掉王婆这个中间环节,直接是西
门庆和潘金莲勾搭,估计很难成就武松杀嫂事件。
那我们再考虑一下,水浒里还有没有这类型的女人?有,卢俊义的老婆贾氏(就是和那个固管家苟合
的那个),这名字起的:“假使”,那我们也让王婆做她的代理:
把贾氏素描出来:
package com.cbf4life.proxy;public class JiaShi implements KindWomen {public void happyWithMan() {System.out.println("贾氏正在Happy中......");}
public void makeEyesWithMan() {System.out.println("贾氏抛媚眼");
}
}
西门庆勾贾氏:
package com.cbf4life.proxy;
/**
* 定义一个西门庆,这人色中饿鬼
*/
public class XiMenQing {public static void main(String[] args) {//改编一下历史,贾氏被西门庆勾走:
JiaShi jiaShi = new JiaShi();
WangPo wangPo = new WangPo(jiaShi); //让王婆作为贾氏的代理人
wangPo.makeEyesWithMan();
wangPo.happyWithMan();
}
}

说完这个故事,那额总结一下,代理模式主要使用了Java 的多态,干活的是被代理类,代理类主要是
接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,
大家知根知底,你能做啥,我能做啥都清楚的很,同一个接口呗。

此随笔或为自己所写、或为转载于网络。仅用于个人收集及备忘。

设计模式-代理模式【Proxy Pattern】相关推荐

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

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

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

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

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

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

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

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

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

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

  6. 设计模式(结构型)之代理模式(Proxy Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  7. JAVA设计模式Design Pattern→单例模式Singleton Pattern、工厂模式Factory Pattern、代理模式Proxy Pattern

    私有化构造函数的类可以提供相应的 "接口"(一般就是静态方法)来返回自己的唯一实例供外部调用,像这样的确保只生成一个实例的模式被称作单例模式. 工厂模式,一个模型,用来大规模的生产 ...

  8. 代理模式(Proxy Pattern)

    设计模式 - 吕震宇 .NET设计模式系列文章 薛敬明的专栏 乐在其中设计模式(C#) C#设计模式(13)-Proxy Pattern 一. 代理(Proxy)模式 代理(Proxy)模式给某一个对 ...

  9. C++设计模式--代理模式(Proxy)

    前言 C++相对其他编程语言来说算是比较难的了,相关知识点非常多,并且有些概念理解起来比较困难,对于初学者来说可能会感觉到非常痛苦.随着项目难度的升级,需要不断地优化框架从而使整个结构更具有扩展性,那 ...

  10. 趣谈设计模式 | 代理模式(Proxy):利用代理来控制对象的访问

    文章目录 案例:房屋中介 代理模式 代理模式与装饰器模式 代理模式的应用 远程代理 虚拟代理 安全代理 智能引用代理 写时拷贝代理 总结 完整代码与文档 由于代理模式相较于前面的其他设计模式来说更加简 ...

最新文章

  1. linux终端字体大小6,[adminitrative][archlinux][setfont] 设置console的字体大小
  2. 电脑总是死机 报Service Control M Hid input service 服务因下列错误而停止
  3. java Map 怎么遍历
  4. 【QM-05】Material Specification(物料说明)
  5. linux查看用户拥有的权限
  6. 关于使用AsyncTaskLoader的使用
  7. 去哪儿-16-detail-banner
  8. 诗与远方:无题(十七)
  9. memcached搭建缓存系统
  10. 安岳天气预报软件测试,安岳天气预报15天
  11. [设计模式-行为型]命令模式(Command)
  12. easyui-datagrid对行写样式
  13. MarkDown编辑器中数学公式与符号-LaTeX 各种数学命令,符号
  14. 利用Adams对单摆进行建模、仿真的动力学分析
  15. 657-C/C++总结(一)
  16. C语言之负数的左移/右移运算
  17. 工作中的高效工具推荐,职场人士必备便签小工具
  18. 前端学习—JavaScript
  19. YGG 与 Trial Xtreme 合作,快速进入极限赛车世界
  20. 8253可编程定时/计数器芯片

热门文章

  1. Word文档的基础教程
  2. 关于MAC安装Pycharm的总结
  3. Spring refresh 方法分析之一
  4. 类脑科学实验(四)——LSTM的实现
  5. 如果不调用系统接口,VC也可以不需要vcredist
  6. SpringCloud-alibaba-Nacos 从理论到落地使用
  7. asdoc:Stata结果输出又一利器!
  8. 联想等7家企业遭美“337调查”
  9. [Linux内核]ctrl-z/fg/bg/nohup/setsid/()与/disown/screen
  10. 德州仪器EDI对接案例