《学习笔记》设计模式-代理模式

来源:互联网 发布:java 连接两个string 编辑:程序博客网 时间:2024/05/29 19:14

前言

本文来自《Head Fist 设计模式》一书的实例,这里仅仅是个人笔记记录

代理模式特征

为另一个对象提供一个替身或者占位符以访问这个对象

远程代理

远程代理可以作为另一个JVM上对象的本地代理,调用代理的方法,会被代理利用网络转发到远程执行,并且结果会通过网络返回给代理,再由代理将结果转发给客户

我认为以前的网络编程就是远程代理,还有例如地图轨迹查询
客户端发送requst()-服务器代理这个请求-控制行程记录仪上传-服务器接受结果-送往客户端

保护代理

根据访问权限决定客户是否可以访问的对象代理

虚拟代理(Virtual Proxy)

虚拟代理作为创建开销大的对象代表。虚拟代表经常直到我们真正需要一个对象的时候才真正创建,当对象在创建前和创建中时,有虚拟代理扮演对象的替身。对象创建后,代理就会请求直接委托给对象

例如:图片缓存,虚拟代理负责加载缺省图片和信息提示,等真实图片加载完成再显示具体图片

防火墙模式(FirewallProxy)

控制网络资源访问,保护主题免于“坏”客户的侵害

智能应用代理(Smart Reference Proxy)

当主题被引用时,进行额外的动作。

例如计算一个对象被引用的次数

缓存代理(Caching Proxy)

为开销大的运算结果提供暂时的存储;它也允许多个客户共享结果,以减少计算或者网络延迟

同步代理(Synchronization Proxy)

多线程的情况下为主题提供安全的访问

复杂隐藏代理(Complexity Hiding Proxy)

用来隐藏一个类的复杂集合的复杂度,并进行访问控制

外观代理(Facade Proxy)

用来隐藏一个类的复杂集合的复杂度,并提供另一组简洁的接口

写入时赋值代理(Copy-On-Write-Proxy)

用来控制对象的复制,方法是延迟对象的复制,直到客户真的需要为止,这里是虚拟代理的变体