【设计模式基础】结构型模式 - 7 - 代理(Proxy)

本文介绍了代理模式的概念及其在软件设计中的应用。代理模式通过提供一个代理来控制对原对象的访问,适用于远程代理、虚拟代理等多种场景。文中还详细列举了各种代理类型的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 模式意图


代理(Proxy)模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用。

在一些情况下,一个客户不想或者不能直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介作用。


按照使用目的来划分,代理有以下几种:

  • 远程代理(Remote Proxy):              为一个位于不同的地址空间的对象提供一个局域代表对象。这个不同的地址空间可以是在本机器中。
  • 虚拟代理(Virtual Proxy):                 根据需要创建一个资源消耗较大的对象,使得此对象只在需要时才会被真正创建。
  • Copy-on-Write代理:                          虚拟代理的一种,把复制(克隆)拖延到只有在客户端需要时,才真正采取行动。
  • 保护代理(Protection Proxy):          控制对一个对象的访问,如果需要,可以给不同的用户提供不同级别的使用权限。
  • Cache代理:                                         为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。
  • 防火墙(Firewall)代理:                       保护目标,不让恶意用户接近。
  • 同步化(Synchronization)代理:       使几个用户能够同时使用一个对象而没有冲突。
  • 智能引用(Smart Reference)代理: 当一个对象被引用时,提供一些额外的操作,比如将此对象调用的次数记录下来等。

虚拟代理、远程代理、智能引用代理和保护代理是最为常见的代理模式。


2. 模式定义



Subject:        声明Proxy和RealSubject的共同接口,这样就在任何使用RealSubject的地方都可以使用Proxy;

RealSubject:定义了Proxy所代表的实体;

Proxy:            保存一个引用使得代理可以访问实体;Proxy和RealSubject有相同的接口,这样代理就可以用来代替实体;控制对实体的存取,并可能负责创建和删除它;Proxy通常在将客户端调用传递给RealSubject之前或之后,都要执行某个操作,而不是单纯的将调用传递给RealSubject;


3. 模式实现


4. 模式应用

4.1 远程代理:客户端与webservice使用


4.2 C++智能指针



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值