`
vanadiumlin
  • 浏览: 504887 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

每日一计:代理模式【Proxy Pattern】

 
阅读更多

什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道
被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被
代理的人能干活呀。

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

先定义一种类型的女人:

 

package com.cbf4life.proxy;
 
/**
 * @author cbf4Life cbf4life@126.com
 * I'm glad to share my knowledge with you all.
 * 定义一种类型的女人,王婆和潘金莲都属于这个类型的女人
 */
public interface KindWomen {
 
 //这种类型的女人能做什么事情呢?
 public void makeEyesWithMan(); //抛媚眼
 
 
 public void happyWithMan(); //happy what? You know that!
 
}
 
一种类型嘛,那肯定是接口,然后定义潘金莲:
 
package com.cbf4life.proxy;
 
/**
 * @author cbf4Life cbf4life@126.com
 * I'm glad to share my knowledge with you all.
 * 定一个潘金莲是什么样的人
 */
public class PanJinLian implements KindWomen {
 
 
 public void happyWithMan() {
 System.out.println("潘金莲在和男人做那个.....");
 }

 
 public void makeEyesWithMan() {
 System.out.println("潘金莲抛媚眼");
 
 }
 
}
 
再定一个丑陋的王婆:
 
package com.cbf4life.proxy;
 
/**
 * @author cbf4Life cbf4life@126.com
 * I'm glad to share my knowledge with you all.
 * 王婆这个人老聪明了,她太老了,是个男人都看不上,
 * 但是她有智慧有经验呀,她作为一类女人的代理!
 */
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;
 
/**
 * @author cbf4Life cbf4life@126.com
 * I'm glad to share my knowledge with you all.
 * 定义一个西门庆,这人色中饿鬼
 */
public class XiMenQing {
 
 /*
 * 水浒里是这样写的:西门庆被潘金莲用竹竿敲了一下难道,痴迷了,
 * 被王婆看到了, 就开始撮合两人好事,王婆作为潘金莲的代理人
 * 收了不少好处费,那我们假设一下:
 * 如果没有王婆在中间牵线,这两个不要脸的能成吗?难说的很!
 */
 public static void main(String[] args) {
 //把王婆叫出来
 WangPo wangPo = new WangPo();
 
 //然后西门庆就说,我要和潘金莲happy,然后王婆就安排了西门庆丢筷子的那出戏:
 wangPo.makeEyesWithMan(); //看到没,虽然表面上时王婆在做,实际上爽的是潘金莲
 wangPo.happyWithMan(); }
}
 
那这就是活生生的一个例子,通过代理人实现了某种目的,如果真去掉王婆这个中间环节,直接是西
门庆和潘金莲勾搭,估计很难成就武松杀嫂事件。
那我们再考虑一下,水浒里还有没有这类型的女人?有,卢俊义的老婆贾氏(就是和那个固管家苟合
的那个),这名字起的:“假使”,那我们也让王婆做她的代理:
把贾氏素描出来:
 
package com.cbf4life.proxy;
 
/**
 * @author cbf4Life cbf4life@126.com
 * I'm glad to share my knowledge with you all.
 */
public class JiaShi implements KindWomen {
 
 
 public void happyWithMan() {
 System.out.println("贾氏正在Happy中......");
 

 }
 
 public void makeEyesWithMan() {
 System.out.println("贾氏抛媚眼");
 
 }
 
}
 
西门庆勾贾氏:
 
package com.cbf4life.proxy;
 
/**
 * @author cbf4Life cbf4life@126.com
 * I'm glad to share my knowledge with you all.
 * 定义一个西门庆,这人色中饿鬼
 */
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

    ### 代理模式 Proxy Pattern #### 概念定义 代理模式是一种结构型设计模式,它允许程序员为某对象创建一个代理对象来控制对该对象的访问。简单来说,就是在不修改原始类的基础上,通过引入代理对象来扩展类的行为...

    java 设计模式之代理模式(Proxy Pattern)实现代码及设计详解:动态代理模式、静态代理模式

    在这些模式中,代理模式(Proxy Pattern)是一种常用的结构型设计模式,它允许我们为一个对象创建一个代理,该代理对象在客户端和目标对象之间起到中介的作用,可以增加额外的功能或控制访问。 代理模式分为两种...

    Android设计模式之代理模式(Proxy Pattern)

    代理模式是设计模式的一种,它的主要目的是在不改变原有对象的基础上,为一个对象提供额外的功能或者控制对这个对象的访问。在Android开发中,代理模式的应用尤为常见,尤其在处理复杂的业务逻辑、网络请求、界面...

    设计模式之代理模式proxy

    **设计模式之代理模式(Proxy Pattern)** 设计模式是软件工程中的一种最佳实践,它是在特定情境下解决常见问题的模板。代理模式是其中一种行为设计模式,它的核心思想是为一个对象提供一个替身或者代理,以控制对...

    Proxy Pattern 代理模式

    Proxy Pattern 代理模式 采用JAVA实现,可以下载看看。

    设计模式 之 “代理模式[Proxy Pattern]”

    **代理模式(Proxy Pattern)**是软件设计模式中的结构型模式之一,它在对象访问控制、增加额外功能或在客户端与目标对象之间提供一个中介等方面有广泛的应用。在代理模式中,代理类作为真实对象的代表,它持有真实...

    代理模式(Proxy Pattern)完整示例代码

    代理模式是一种设计模式,它允许我们为一个对象创建一个代理对象,这个代理对象可以在原对象进行某些操作之前或之后添加额外的功能。代理模式的核心在于,它提供了一种方式来间接访问或控制目标对象,增加了系统的...

    设计模式C++学习之代理模式(Proxy)

    代理模式是一种设计模式,它是结构型模式之一,主要用于在客户端和目标对象之间建立一个代理对象,以便控制对目标对象的访问。在C++中,代理模式可以用来为其他对象提供一种代理以控制对这个对象的访问,或者增加...

    设计模式之代理模式Proxy

    代理模式是设计模式中的一种结构型模式,它在对象交互中起到了中介的作用,允许通过代理对象来控制对原对象的访问。代理模式的核心思想是为一个对象提供一个替身,以便增加新的功能或者控制对原对象的访问。这种模式...

    C#面向对象设计模式纵横谈(13):Proxy 代理模式(结构型模式) (Level 300)

    本文将深入探讨C#中的一个关键设计模式——代理模式,它属于结构型模式的一种,适用于管理和控制对象的访问。我们将从概念、分类、实现方式以及实际应用等方面进行详细的讲解。 1. **代理模式概念**: 代理模式是一...

    设计模式之代理模式proxy.zip

    代理模式是一种常用的设计模式,它在软件开发中扮演着重要的角色。代理模式允许我们为一个对象创建一个代理,这个代理对象在客户端和目标对象之间起到中介的作用,可以增强或控制对目标对象的访问。代理模式的主要...

    结构型模式之代理模式(Proxy)

    代理模式是一种设计模式,属于结构型模式之一,其主要目的是为其他对象提供一个代理,以控制对该对象的访问。在实际应用中,代理模式能够帮助我们实现如下的功能: 1. 远程代理:代理对象可以代表一个位于远程系统...

    C#面向对象设计模式纵横谈(13):Proxy 代理模式(结构型模式)

    ### C#面向对象设计模式纵横谈(13):Proxy 代理模式(结构型模式) #### 重要概念:代理模式 代理模式是一种常用的结构型设计模式,它通过为另一个对象提供一个代理,来控制对该对象的访问。这种模式在软件工程中...

    c++-设计模式之代理模式(Proxy)

    代理模式(Proxy Pattern)是一种结构型设计模式,用于为其他对象提供一种代理以控制对这个对象的访问。代理模式通常用于保护、延迟加载、记录请求等场景,可以在不改变原有对象的情况下为其增加新的功能。 代理...

    设计模式代理模式PPT学习教案.pptx

    代理模式(Proxy Pattern)是一种结构型设计模式,它提供了一个代理对象以控制对另外一个对象的访问。代理对象充当着中间人的角色,帮助客户端访问目标对象,并可以在访问过程中添加一些额外的操作。 知识点2:代理...

    355.353.JAVA基础教程_面向对象(下)-接口应用:代理模式(355).rar

    在Java编程语言中,面向对象(Object-Oriented Programming,OOP)是核心特性之一,而接口(Interface)和代理模式(Proxy Pattern)是其中重要的概念。本教程将深入探讨这两个概念及其在实际开发中的应用。 接口在...

    JAVA23种设计模式代码学习.zip

    获取到【文件夹】名称: proxy_pattern 获取到【文件夹】名称: simple_factory_pattern 获取到【文件夹】名称: single_pattern 获取到【文件夹】名称: status_pattern 获取到【文件夹】名称: strategy_...

    PandaJS 使用说明(1.6):日志与 proxy 对象

    通过创建 Proxy 实例,你可以对属性的读取、设置、删除等操作进行拦截,实现数据的动态代理。 2. 数据验证:在访问对象属性时,可以通过Proxy来添加数据验证规则,防止非法数据的写入。这对于确保数据的完整性和...

    代理模式 proxy-learn.rar

    代理模式是一种设计模式,它允许我们在不修改原有对象的情况下,为对象添加额外的功能或控制访问。在Java中,代理模式有静态代理和动态代理两种主要实现方式,它们都是为了在客户端与目标对象之间插入一个代理对象,...

    代理模式 C++实现

    代理模式(Proxy) 定义: 为其他对象提供一种代理以控制对这个对象的访问 结构: 由三部分组成 1.RealSubject(真实对象): 真正会调用到的对象 2.Proxy(代理对象): 代理真实对象的地方 3.Subject(共同点): 代理对象...

Global site tag (gtag.js) - Google Analytics