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

 package com.iadmob.proxy;

 /**
* @author http://www.cnblogs.com/initial-road/
* 定义一种类型的女人,王婆和潘金莲都属于这个类型的女人
*/ public interface KindWomen {   //这种类型的女人能做什么事情呢?
  public void makeEyesWithMan(); //抛媚眼   public void happyWithMan(); //happy } 一种类型嘛,那肯定是接口,然后定义潘金莲: package com.iadmob.proxy; /**
* @author http://www.cnblogs.com/initial-road/
* 定一个潘金莲是什么样的人
*/
public class PanJinLian implements KindWomen{   @Override
  public void happyWithMan() {
    System.out.println("潘金莲在和男人...");
  }   @Override
  public void makeEyesWithMan() {
    System.out.println("潘金莲抛媚眼");
  } } 再定一个丑陋的王婆: package com.iadmob.proxy; /**
* @author http://www.cnblogs.com/initial-road/
* 王婆这个人老聪明了,她太老了,是个男人都看不上,
* 但是她有智慧有经验,她作为一类女人的代理
*/
public class WangPo implements KindWomen{
  private KindWomen kindWomen;   public WangPo(){ //默认的话,是潘金莲的代理
    this.kindWomen = new PanJinLian();
  }   //她可以是KindWomen的任何一个女人的代理,只要你是这一类型
  public WangPo(KindWomen kindWomen){
    this.kindWomen = kindWomen;
  }   @Override
  public void happyWithMan() {
    this.kindWomen.happyWithMan(); //自己老了,干不了,可以让年轻的代替
  }   @Override
  public void makeEyesWithMan() {
    this.kindWomen.makeEyesWithMan();
  } } 两个女主角都上场了,男主角也该出现了: package com.iadmob.proxy; /**
* @author http://www.cnblogs.com/initial-road/
* 定义一个西门庆,这人色中饿鬼
*/
public class XiMenQing {
  /**
  * 水浒里是这样写的:西门庆被潘金莲用竹竿敲了一下难道,痴迷了
  * 被王婆看到了,就开始撮合两人好事,王婆作为潘金莲的代理人
  * 收了不少好处费,那我们假设一下
  * 如果没有王婆在中间牵线,这两个不要脸的能成吗?难说的很!
  */
  public static void main(String[] args) {
    //把王婆叫出来
    WangPo wangPo = new WangPo();
    //然后西门庆就说,我要和潘金莲happy,然后王婆就安排了西门庆丢筷子的哪出戏:
    wangPo.makeEyesWithMan(); //看到没,虽然表面上王婆在做,实际上爽的是潘金莲
    wangPo.happyWithMan();
  }
}

  这就是活生生的一个例子,通过代理人实现了某种目的,如果真去掉王婆这个中间环节,直接是西门庆和潘金莲勾搭,估计很难成就武松杀嫂事件。
那我们再考虑一下,水浒里还有没有这类型的女人?有,卢俊义的老婆贾氏(就是和那个固管家苟且的那个),这名字起的:“贾氏”,那我们也让王婆做她的代理:
把贾氏素描出来:

 package com.iadmob.proxy;

 public class JiaShi implements KindWomen{

   @Override
  public void happyWithMan() {
    System.out.println("贾氏正在Happy中......");
  }   @Override
  public void makeEyesWithMan() {
    System.out.println("贾氏抛媚眼");
  } }

西门庆勾贾氏:

 package com.iadmob.proxy;

 /**
* @author http://www.cnblogs.com/initial-road/
* 定义一个西门庆,这人色中饿鬼
*/
public class XiMenQing {
  /**
  * 水浒里是这样写的:西门庆被潘金莲用竹竿敲了一下难道,痴迷了
  * 被王婆看到了,就开始撮合两人好事,王婆作为潘金莲的代理人
  * 收了不少好处费,那我们假设一下
  * 如果没有王婆在中间牵线,这两个不要脸的能成吗?难说的很!
  */
  public static void main(String[] args) {     //改编一下历史,贾氏被西门庆勾走:
    JiaShi jiaShi = new JiaShi();
    WangPo wangPo = new WangPo(jiaShi);  //让王婆作为贾氏的代理人
    wangPo.makeEyesWithMan();
    wangPo.happyWithMan();
  }
}

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

24种设计模式--代理模式【Proxy Pattern】的更多相关文章

  1. 设计模式 - 代理模式(proxy pattern) 未使用代理模式 具体解释

    代理模式(proxy pattern) 未使用代理模式 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 部分代码參考: http://blog.csdn. ...

  2. 设计模式——代理模式(Proxy Pattern)

    代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. UML图: 模型设计: Subject类: package com.cnblog.clarck; /** * Subject 类 ...

  3. C#设计模式——代理模式(Proxy Pattern)

    一.概述在软件开发中,有些对象由于创建成本高.访问时需要与其它进程交互等原因,直接访问会造成系统速度慢.复杂度增大等问题.这时可以使用代理模式,给系统增加一层间接层,通过间接层访问对象,从而达到隐藏系 ...

  4. 23种设计模式--代理模式-Proxy

    一.代理模式的介绍       代理模式我们脑袋里出现第一个词语就是代购,其实就是这样通过一个中间层这个中间成是属于什么都干什么都买得,俗称"百晓生",在平时得开发中我们经常会听到 ...

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

    定义: 为其他对象提供一种代理以控制对这个对象的访问: 角色: 1,抽象主题类,(接口或者抽象类),抽象真实主题和代理的共有方法(如下Subject类): 2,具体实现的主题类,继承或者实现抽象主题类 ...

  6. 24种设计模式-策略模式(Strategy Pattern)

    一.优点: 1. 策略模式提供了管理相关的算法族的办法.策略类的等级结构定义了一个算法或行为族.恰当使用继承可以把公共的代码转移到父类里面,从而避免重复的代码. 2. 策略模式提供了可以替换继承关系的 ...

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

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

  8. 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)

    原文:乐在其中设计模式(C#) - 代理模式(Proxy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 代理模式(Proxy Pattern) 作者:webabcd 介绍 为 ...

  9. 设计模式系列之代理模式(Proxy Pattern)——对象的间接访问

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

随机推荐

  1. [学习整理]eclipe/MyEclipse:重要的快捷键

    一.查看大工程代码最重要的几个快捷键 其实有一些,直接在编辑器页面内右键也可查看相应的快捷键(比如F3,F4,Ctrl+O,Ctrl+T),但有些比较好用的快捷键,并不能能直接或方便地在eclipse ...

  2. JavaScript的Date 方法

    js中Date 方法 Date (对象) Date 对象能够使你获得相对于国际标准时间(格林威治标准时间,现在被称为 UTC-Universal Coordinated Time)或者是 Flash ...

  3. Myeclipse在启动Tomcat服务器的时候总是进入debug视图的解决方法

    最近调试程序,由于出现过一些错误,在调试的时候,更改过一些东西,但是后来在myeclipse下启动Tomcat服务器的时候,自动的跳入到debug视图了(以前是一启动Tomcat服务器后,直接就加载t ...

  4. Java 操作 EXCEL

    今天帮朋友写了一段用来处理EXCEL内容的程序,在这里记录下自己的学习过程.主要是对EXCEL表格中的内容做分类和统计,使用计算机来做这种重复的机械性地工作再好不过了.首先,我们需要下载一个java操 ...

  5. centos7免密码登录

    2台主机 192.168.30.207 Master 192.168.30.251 Node1 三台主机检查 ~/.ssh 文件夹没有则新建 ssh-keygen -t rsa 一路狂按回车,最终生成 ...

  6. Oracle RAC中的投票算法

    RAC集群中有三台机器,A,B,C A,B,C都会有3票,假设这是A的心跳线出现问题,整个RAC集群就划分为两个paritition, 一个是只有A的partition,一个是B,C组成的partit ...

  7. bzoj4448 SCOI2015 情报传递 message

    传送门bzoj4448 题解 离线之后构建树上主席树,每个点的线段树维护到根路径的信息,不用链剖(我的链剖只是拿来求\(\mathrm{lca}\)的),时空复杂度\(O(n\log{n})\). c ...

  8. bzoj1222: [HNOI2001]产品加工

    注意时间都是 <= 5的.. #include<cstdio> #include<cstring> #include<cstdlib> #include< ...

  9. 【原创】javascript——事件思维导图

  10. java中的上转型对象

    1. 定义 如果B类是A类的子类或间接子类,当用B类创建对象b并将这个对象b的引用赋给A类对象a时,如: A a;a = new B();ORA a;B b = new B();a = b; 通俗的说 ...