[设计模式笔记]二. 结构型模式--13.Proxy模式(代理模式)(一)

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

一. 意图


为其他对象提供一种代理以控制对这个对象的访问.


二. 适用性


在需要用比较通用和复杂的对象指针代替简单的指针的时候使用Proxy模式

下面是一些可以使用P r o x y模式常见情况:

1. 远程代理(Remote Proxy)为一个对象在不同的地址空间提供局部代表.

2. 虚代理(Virtual Proxy)根据需要创建开销很大的对象

3. 保护代理(Protection Proxy)控制对原始对象的访问。保护代理用于对象应该有不同的访问权限的时候

4. 智能指引(Smart Reference)取代了简单的指针它在访问对象时执行一些附加操作(智能指针).

(智能指针的功能有自动创建/销毁引用计数检查锁定)


三. 模式结构


图1 


四. 角色说明


Proxy

—保存一个引用使得代理可以访问实体。若RealSubjectSubject的接口相同, Proxy会引用Subject

—提供一个与Subject的接口相同的接口这样代理就可以用来替代实体.

—控制对实体的存取并可能负责创建和删除它.

—其他功能依赖于代理的类型:

RemoteProxy负责对请求及其参数进行编码并向不同地址空间中的实体发送已编码的请求.

VirtualProxy可以缓存实体的附加信息以便延迟对它的访问.

ProtectionProxy检查调用者是否具有实现一个请求所必需的访问权限.

Subject

—定义RealSubjectProxy的共用接口这样就在任何使用RealSubject的地方都可以使用Proxy.

RealSubject

—定义Proxy所代表的实体。

Client

AbstractionClient的请求转发给它的Implementor对象.


五. 说明


Proxy并不总是需要知道实体的类型Proxy类能够完全通过一个抽象接口处理它的实体则无须为每一个RealSubject类都生成一个Proxy:Proxy可以统一处理所有的RealSubject但是如果Proxy要实例化RealSubjects (例如在virtual proxy),那么它们必须知道具体的类。


我的理解


1. Proxy比较简单相当于就是在一个对象前加多一层这一层对于客户来说是透明的

2. 例如在需要调用某对象的某方法前必须要进行一些繁琐的判断而当这个方法在很多地方被使用时那么我们可以使用一个代理类把该对象代理在代理中调用对象的方法时做一些判断等. 又例如 智能指针

3. 为了对用户的透明性代理类需要实现对象的被代理的函数.(通过继承相同的父类实现).


相关模式


Adapter: 适配器Adapter为它所适配的对象提供了一个不同的接口相反代理提供了与它的实体相同的接口然而用于访问保护的代理可能会拒绝执行实体会执行的操作因此,它的接口实际上可能只是实体接口的一个子集. (个人认为也不能那么死板吧Adapter模式中我也可以拒绝执行实体会执行的操作吧就看你的需求而已.)

Decorator:尽管decorator的实现部分与代理相似decorator的目的不一样, Decorator为对象添加一个或多个功能而代理则控制对对象的访问代理的实现与decorator的实现类似但是在相似的程度上有所差别. Protection Proxy的实现可能与decorator的实现差不多另一方面,Remote Proxy不包含对实体的直接引用而只是一个间接引用"主机ID, 主机上的局部地址”. Virtual Proxy开始的时候使用一个间接引用例如一个文件名但最终将获取并使用一个直接引用.

个人理解在这些模式中都有一个相似性就是都是包含了一个对象的引用或者实体用户不直接调用对象而是过这些模式中的对应类间接调用对象通过这样的间接调用在调用对象的方法前后可以做一些事情.(当然不做也可以虽然他们的目的是不一样的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值