为还有一个对象提供一个替身或占位符以控制对这个对象的訪问。

代理模式的组成:

主题接口(Subject):提取真正主题与代理的公共方法,让使用真正主题的地方也能用代理取代。

真正主题(RealSubject):真正处理请求的类。

代理(Proxy):真正主题的代理类,请求方通过调用代理对象间接调用真正主题。

代理模式的简单样例:

(主题接口类)Subject.java

package xu.neng.Proxy;

public interface Subject {
public void request();
}

(正真主题类)RealSubject.java

package xu.neng.Proxy;

public class RealSubject implements Subject{
@Override
public void request() {
System.out.println("竟敢调用我!!!");
}
}

(代理类)Proxy.java

package xu.neng.Proxy;

//必须和被代理对象继承统一接口
public class Proxy implements Subject {
RealSubject realSubject; public Proxy() {
this.realSubject = new RealSubject();
} // 从构造方法中传入被代理的对象
public Proxy(RealSubject realSubject) {
this.realSubject = realSubject;
} // 调用方法
@Override
public void request() {
realSubject.request();
}
}

(測试类,即Client)Test.java

package xu.neng.Proxy;

/**
* 測试代理模式。(相当于UML图中的Client)
*
* @author neng
*
*/
public class Test {
public static void main(String[] args) {
// 我想调用RealSubject出来玩玩
Proxy proxy = new Proxy(new RealSubject());
proxy.request();
}
}

代理模式的应用:



iOS开发中经常使用。代理模式更像是一种思想,通过中间手段来控制正真对象的訪问,同一时候还能够做一些包装。

防火墙代理:控制网络资源的訪问、保护主题免于坏客户的侵害。

智能引用代理:当主题被引用时,能够进行额外的动作。如进行引用计数等。

缓存代理:为开销大的运算结果提供暂时存储。同意多个客户共享结果,以降低计算或网络延迟。(本质上还是额外做其它事情)

同步代理:多线程时,为主题提供安全的訪问。

写入时复制代理:用来控制(延迟)对象的复制,直到客户真的须要为止。



參考一篇非常有意思的文章:http://yangguangfu.iteye.com/blog/815787



转载请注明出处:http://blog.csdn.net/xn4545945  





设计模式----代理模式(Proxy)的更多相关文章

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

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

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

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

  3. 设计模式--代理模式Proxy(结构型)

    一.代理模式 为其他对象提供一种代理以控制对这个对象的访问. 代理模式分为四种: 远程代理:为了一个对象在不同的地址空间提供局部代表.这样可以隐藏一个对象存在于不同地址空间的事实. 虚拟代理:根据需要 ...

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

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

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

    应用场景: 领导都有秘书,一般会代理领导的部分职能角色,处理签字.报销.开会等任务.很多新人可能都只知道秘书的存在,毕竟每天与其打交道,不知道领导的存在.但是领导的的确确是真实存在的. 场景说明: 代 ...

  6. 大话设计模式--代理模式 proxy

    1. 代理模式: 为其他对象提供一种代理以控制这个对象的访问. 代理模式使用场合: a. 远程代理, 为一个对象在不同的地址空间提供局部代理,隐藏一个对象存在于不同地址空间的事实.如.net中WebS ...

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

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

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

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

  9. 深入浅出设计模式——代理模式(Proxy Pattern)

    模式动机在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用.代理对象可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象去掉客户不能看到 ...

  10. 【转】设计模式(十一)代理模式Proxy(结构型)

    设计模式(十一)代理模式Proxy(结构型) 1.概述 因为某个对象消耗太多资源,而且你的代码并不是每个逻辑路径都需要此对象, 你曾有过延迟创建对象的想法吗 ( if和else就是不同的两条逻辑路径) ...

随机推荐

  1. C++函数二义性问题,我怎么感觉编译器有偷懒嫌疑!!!

    瞎扯一段,讲得不一定对.纯属学习! struct BB{ void a(){ cout << "bb's a()\n"; }}; struct B1 : public ...

  2. PHP中的&传值引用的问题,在foreach循环的结果能帮解释下输出的结果原理是什么?

    PHP中的&传值引用的问题,在foreach循环的结果能帮解释下输出的结果原理是什么? 代码如下: <?php $arr = array('one','two','three'); fo ...

  3. Java学习----对象与对象之间的关系

    1.依赖 对象之间最弱的一种关联方式,是临时性的关联.代码中一般指由局部变量,函数参数,返回值建立的对于其他对象的调用关系. public class A { // 方法一 public void t ...

  4. dedecms模版制作活动的折叠菜单

    需要做成这种样式 url请求为这样: http://m03.com/plus/list.php?tid=19 这些菜单项都有对应的tid项,页面刷新后,应该将所有的菜单折叠起来,对于tid=19的菜单 ...

  5. Extjs4.2.1学习笔记[更新]

    心血来潮准备学习一下Extjs,就从官方网站http://extjs.org.cn/下载了最新版本4.2.1,开始从头学习,记一下笔记,让自己能够持之以恒. 先说一下基本文件类库引用吧, 每个项目一开 ...

  6. &lt和&gt

    今天用到&gt查了查资料就是这么个回事.

  7. 基于Jquery+Ajax+Json实现分页显示

    1.后台action产生json数据. List blackList = blackService.getBlackInfoList(mobileNum, gatewayid, startDate, ...

  8. SOA和微服务

    SOA和微服务 SOA和微服务到底是什么关系? 说实话,我确实不明白SOA和微服务到底有什么本质上的区别,两者说到底都是对外提供接口的一种架构设计方式.我倒觉得微服务其实就是随着互联网的发展,复杂的平 ...

  9. Eclipse中查找接口实现类快捷键

    就是点击某个接口某个方法名字的时候,直接跳到它的某个实现类里面,一般我们习惯对着那个接口的方法按F3,但是这会直接跳到接口类的源码中,那么呵呵,我们换一个ctrl+T 然后自己选择一下实现类就进去了. ...

  10. JavaScript----Performance Tool and Process

    1. Syntax-------------JSLint, JSHint, 2. Combine------------YUI 3. Minify---------------JSMin