【设计模式】5.代理模式

用途

1. 远程代理(Remote Proxy)

  • 用于为一个对象在不同地址空间(如不同机器)创建局部代表。
  • 比如:RPC(远程过程调用),你本地调用的是 Proxy,实际由它发起网络请求去访问远程服务。
  • 案例:gRPC、Java 的 RMI、C++ 分布式服务框架。

2. 安全代理(Protect Proxy)

  • 控制权限,防止无权限的客户端访问敏感对象。
  • 比如:用户权限控制,只有管理员用户才能操作某些服务。

3. 智能代理(Smart Reference)

  • 在访问真实对象时,增加一些额外的操作。
    • 引用计数
    • 日志记录
    • 缓存
  • 比如:智能指针(如 std::shared_ptr)、数据库连接池等。

UML

代码

c++ 复制代码
#pragma once
#include <iostream>

// 抽象类
class ISubject
{
public:
	virtual void request()= 0;
};

// 真实类
class RealSubject : ISubject
{
public:
	void request() override
	{
		std::cout << "发送了一条请求" << std::endl;
	}
};

// 代理类
class Proxy : ISubject
{
public:
	void request() override
	{
		rs.request();
	}
private:
	RealSubject rs;
};