1,什么是代理模式?

代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。

2,策略模式有什么好处?

在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

3,代理模式一般涉及到的角色有:

抽象角色:声明真实对象和代理对象的共同接口;

代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。

真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。

4,应用场景举例:

比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时是这样的体现的

先说说这个场景中的要素:一种类型的女人,潘金莲,王婆,西门庆,后来扩展的贾氏也和西门庆勾上了,我们是假设的,然后西门庆找潘金莲happy,但潘金莲不好意思直接,就找个王婆代理呗。我们看看具体代码。

先定义一种女人

Java代码  
  1. package com.yangguangfu.proxy;
  2. /**
  3. *
  4. * @author 阿福(trygf521@126.com)<br>
  5. *定义一种类型的女人,王婆和潘金莲都属于这个类型的女人
  6. */
  7. public interface KindWoman {
  8. //这种女人能做什么事情呢?
  9. public void makeEyesWithMan();//抛媚眼
  10. public void happyWithMan();//和男人那个....
  11. }

一种类型嘛,那肯定是接口,定义个潘金莲

Java代码  
  1. package com.yangguangfu.proxy;
  2. /**
  3. *
  4. * @author 阿福(trygf521@126.com)<br>
  5. *定义一个潘金莲是什么样的人
  6. */
  7. public class PanJinLian  implements KindWoman{
  8. @Override
  9. public void happyWithMan() {
  10. System.out.println("潘金莲和男人在做那个...");
  11. }
  12. @Override
  13. public void makeEyesWithMan() {
  14. System.out.println("潘金莲抛媚眼...");
  15. }
  16. }

再定义个丑陋的王婆

Java代码  
  1. package com.yangguangfu.proxy;
  2. /**
  3. *
  4. * @author 阿福(trygf521@126.com)<br>
  5. *王婆这个人老聪明了,她太老了,是个男人都看不上她,
  6. *但是她有智慧经验呀,他作为一类女人的代理!
  7. */
  8. public class WangPo implements KindWoman {
  9. private KindWoman kindWoman;
  10. public WangPo(){
  11. //默认的话是潘金莲的代理
  12. this.kindWoman = new PanJinLian();
  13. }
  14. //她可以是KindWomam的任何一个女人的代理,只要你是这一类型
  15. public WangPo(KindWoman kindWoman){
  16. this.kindWoman = kindWoman;
  17. }
  18. @Override
  19. public void happyWithMan() {
  20. //自己老了,干不了了,但可以叫年轻的代替。
  21. this.kindWoman.happyWithMan();
  22. }
  23. @Override
  24. public void makeEyesWithMan() {
  25. //王婆年纪大了,谁看她抛媚眼啊
  26. this.kindWoman.makeEyesWithMan();
  27. }
  28. }

两个女主角都上场了,该男主角了,定义个西门庆

Java代码  
  1. package com.yangguangfu.proxy;
  2. /**
  3. *
  4. * @author 阿福(trygf521@126.com)<br>
  5. *水浒传是这样写的:西门庆被潘金莲用竹竿敲了一下,西门庆看痴迷了,被王婆看到了,就开始撮合两人好事,王婆作为潘金莲的代理人收了不少好处费,那我们假设一下:
  6. *如果没有王婆在中间牵线,这两个不要脸的能成事吗?难说得很!
  7. */
  8. public class XiMenQiang {
  9. /**
  10. * @param args
  11. */
  12. public static void main(String[] args) {
  13. WangPo wangPo;
  14. //把王婆叫出来
  15. wangPo = new WangPo();
  16. //然后西门庆说,我要和潘金莲Happy,然后王婆就安排了西门庆丢筷子哪出戏:
  17. wangPo.makeEyesWithMan();
  18. //看到没有表面是王婆在做,其实爽的是潘金莲
  19. wangPo.happyWithMan();
  20. }
  21. }

那这就是活生生的一个例子,通过代理人实现了某种目的,如果真去了王婆这个中间环节,直接西门庆和潘金莲勾搭,估计很难成就武松杀嫂事件。

那我们再考虑一下,水浒里面还有没有这类型的女人?有,卢俊义的老婆贾氏(就是和那个管家苟合的那个),这个名字起的:“贾氏”,那我们也让王婆做她的代理:

Java代码  
  1. package com.yangguangfu.proxy;
  2. /**
  3. *
  4. * @author 阿福(trygf521@126.com)<br>
  5. *定义一个贾氏是什么样的人
  6. */
  7. public class JiaShi implements KindWoman {
  8. @Override
  9. public void happyWithMan() {
  10. System.out.println("贾氏和男人在做那个...");
  11. }
  12. @Override
  13. public void makeEyesWithMan() {
  14. System.out.println("贾氏抛媚眼...");
  15. }
  16. }

西门庆勾潘金莲又勾引贾氏

Java代码  
  1. package com.yangguangfu.proxy;
  2. /**
  3. *
  4. * @author 阿福(trygf521@126.com)<br>
  5. *水浒传是这样写的:西门庆被潘金莲用竹竿敲了一下,西门庆看痴迷了,被王婆看到了,就开始撮合两人好事,王婆作为潘金莲的代理人收了不少好处费,那我们假设一下:
  6. *如果没有王婆在中间牵线,这两个不要脸的能成事吗?难说得很!
  7. */
  8. public class XiMenQiang {
  9. /**
  10. * @param args
  11. */
  12. public static void main(String[] args) {
  13. WangPo wangPo;
  14. //把王婆叫出来
  15. wangPo = new WangPo();
  16. //然后西门庆说,我要和潘金莲Happy,然后王婆就安排了西门庆丢筷子哪出戏:
  17. wangPo.makeEyesWithMan();
  18. //看到没有表面是王婆在做,其实爽的是潘金莲
  19. wangPo.happyWithMan();
  20. //西门庆勾引贾氏
  21. JiaShi jiaShi = new JiaShi();
  22. wangPo = new WangPo(jiaShi);
  23. wangPo.makeEyesWithMan();
  24. wangPo.happyWithMan();
  25. }
  26. }

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

代理模式详解--潘金莲版相关推荐

  1. cglib动态代理jar包_代理模式详解:静态代理+JDK/CGLIB 动态代理实战

    1. 代理模式 代理模式是一种比较好的理解的设计模式.简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标 ...

  2. 代理模式详解(静态代理和动态代理的区别以及联系)

    原文链接:https://www.cnblogs.com/takumicx/p/9285230.html 1. 前言 代理模式可以说是生活中处处可见.比如说在携程上定火车票,携程在这里就起到了一个代理 ...

  3. (十二)命令模式详解(故事版)- 转

    作者:zuoxiaolong8810(左潇龙),转载请注明出处. 背景:小左是魔都某公司技术部的一名屌丝程序猿,每天的工作就是维护一个20世纪的古董级项目,由于公司不大,所以公司很多制度不太完善,导致 ...

  4. (十八)享元模式详解(都市异能版) - 转

    作者:zuoxiaolong8810(左潇龙),转载请注明出处. 魔都. 自从越狱风波过去以后,小左的生活便又回到了之前的节奏,依旧是每日徘徊在魔都某天桥,继续着自己的算命之旅. 说起这次越狱风波,着 ...

  5. (二十一)状态模式详解(DOTA版) - 转

    作者:zuoxiaolong8810(左潇龙),转载请注明出处. 本次LZ给各位介绍状态模式,之前在写设计模式的时候,引入了一些小故事,二十章职责连模式是故事版的最后一篇,之后还剩余四个设计模式,LZ ...

  6. (十四)桥接模式详解(都市异能版) - 转

    作者:zuoxiaolong8810(左潇龙),转载请注明出处. 魔都国贸附近,某天夜里十一点半. 那一晚,魔都出奇的没有做只打雷不下雨的勾当,老天似乎是要将魔都淹没一般,倾盆大雨像不要命似的拍打着地 ...

  7. Spring AOP理论 +代理模式详解

    目录 1.理解AOP 1.1.什么是AOP 1.2.AOP体系与概念 1.3.Spring AOP 通知的执行顺序 2.代理模式 2.1.静态代理 2.2.静态代理的缺点 3.动态代理 JDK 动态代 ...

  8. 代理模式详解(包含原理详解)

    http://www.cnblogs.com/zuoxiaolong/p/pattern3.html 作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为 ...

  9. 第四篇、代理模式详解(三种)

    一.代理模式 代理模式的定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用.通俗的来讲代理模式就是我们生活中常见的中介. 二.代理模式的实现方式 1.静态代理 在代理之前,所有 ...

最新文章

  1. Atitit r2017 r6 doc list on home ntpc.docx
  2. Android-Xml绘图
  3. ORA-00923: FROM keyword not found where expected(单双引号)
  4. 使用wsimport命令创建Web Service客户端
  5. 十五、java的基本数据类型
  6. CVTE 2016 春季实习校招一面(C++后台)
  7. 为什么阿里巴巴不建议MySQL使用Text类型?
  8. 绕过CDN查找网站真实IP
  9. 2021平凉二中高考成绩查询,平凉二中召开2020届高考启动暨教学工作推动会
  10. android提交sql语句,sql的提交 - 亭子happy的个人页面 - OSCHINA - 中文开源技术交流社区...
  11. ietester,各种版本的IE都有
  12. 两个经纬度偏角_[转载]根据两点的经纬度求方位角和距离,等
  13. 使用GPIO输出控制Led亮灭(CC2530)
  14. Python_从零开始学习_(27) 字符串
  15. CentOS Linux虚拟机内存耗费太大
  16. 2022年终总结-两年Androider的成长之路
  17. SpringMVC视频-佟刚-专题视频课程
  18. 深入理解 Java 反射:Class (反射的入口)
  19. 洛谷 P1566 加等式
  20. 压在心底慢慢体会__珍藏的句子

热门文章

  1. 《所谓会说话,就是会换位思考》总结
  2. elementui组件中,树形组件的使用
  3. 如何化解频临离婚边缘的婚姻危机
  4. 【低代码】云端组态集成与设备管理配置
  5. b站服务器崩溃大会员自动续费,[财经]B站因服务器故障赠送用户1天大会员!回应补偿会自动续费会退款 - 南方财富网...
  6. 装逼神器,5 行 Python 代码 实现一键批量扣图
  7. Deepin系统下MATLAB中文字体乱码问题解决(加上字体美化)
  8. Debug Diagnostic Tool
  9. jquery ui 主题_使用jQuery UI主题
  10. jquery UI 跟随学习笔记——拖拽(Draggable)