【结构型】代理模式

Posted by Liao on 2023-01-18

一、定义

为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。

可能由于性能、安全控制、分布式等原因,不能直接访问某个对象,因此需要加一层代理。

二、结构

三、使用场景

Proxy的设计有时候需要手动写代码,大部分情况可以用工具自动生成。

分布式系统proxy的应用非常广泛。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class ISubject {
public:
virtual void process();
};

// Proxy的设计
class SubjectProxy: public ISubject {
public:
virtual void process(){
// 对RealSubject的一种间接访问
// ...
}
};


class ClientApp {
ISubject* subject;
public:
ClientApp(){
subject = new SubjectProxy(); // 获取代理对象,而不是realsubject
void doTask(){
//...
subject.process();
//...
}
}
};

四、总结

  • 具体Proxy设计模式的实现方法、实现粒度都想差很大,有些肯能对单个对象细粒度的控制,如字符串copy-on-write技术,有些可能对组件模块提供抽象层代理(分布式系统),在架构层次对对象做proxy。
  • “增加一层间接层”是软件系统中对许多复杂问题的一种常见解决方法。在面向对象系统中,直接使用某些对象会带来许多问题,作为间接层的proxy对象便是解决这类问题的常用手段。