代理模式(Proxy)

代理模式(Proxy)

一、简介

1. 意图

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

2. 结构

其中:

  • Subject类,
  • Proxy类,
  • RealSubject类,定义Proxy所代表的真实实体。
#include <iostream>
using namespace std;

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

// 委托类
class RealSubject : public Subject
{
public:
    void request() override
    {
        cout << "real request..." << endl;
    }
};

// 代理类
class Proxy : public Subject
{
public:
    Proxy()
    {
        real_subject = new RealSubject();
    }
    ~Proxy()
    {
        if (real_subject == nullptr)
            delete real_subject;
    }
    void request() override
    {
        real_subject->request();
    }
private:
    RealSubject* real_subject = nullptr;
};

// 客户端
int main()
{
    // 直接使用RealSubject
    Subject* subject = new RealSubject;
    subject->request();
    delete subject;

    // 使用Proxy
    subject = new Proxy;
    subject->request();
    delete subject;
    return 0;
}

3.举例

  • 买火车票不一定在火车站买,也可以去代售点。

  • Windows 里面的快捷方式。

4 .适用性:

5. 注意事项

  • 和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。
  • 和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。
posted @ 2023-02-23 10:58  某科学的撒把豆子  阅读(244)  评论(0)    收藏  举报