代理模式:为另一个对象提供一个替身或者占位符以控制对这个对象的访问。这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。
代理需要做的:控制和管理访问;需要时可以扩展目标对象的功能;
被代理的对象可以是远程的对象或需要安全控制的对象等。
subject:抽象的主题;
案例:假设你想购买一款华为新出的手机,但是你不知道手机的真假,这时可以通过手机代理来帮你检验手机的真假并帮你购买新出的手机。
抽象的主题(subject):购物
代理:手机代理
realSubject:买家
类图:
实现如下:
shop.h:
#ifndef SHOP_H
#define SHOP_H
#include <iostream>
using namespace std;
class Shop {
public:
virtual void buy() = 0;
};
#endif // SHOP_H
buyer.h:
#ifndef BUYER_H
#define BUYER_H
#include "shop.h"
class Buyer : public Shop {
public:
virtual void buy() override
{
cout << "用户购买手机" << endl;
}
};
#endif // BUYER_H
proxy.h:
#ifndef PROXY_H
#define PROXY_H
#include "buyer.h"
class Proxy : public Shop {
public:
Proxy(Shop* buyer)
{
m_buyer = buyer;
}
void distinguish()
{
cout << "辨别手机为真" << endl;
}
virtual void buy() override
{
distinguish();
cout << "代理人帮用户找到手机" << endl;
m_buyer->buy();
}
private:
Shop* m_buyer;
};
#endif // PROXY_H
main.cpp:
/*
* 代理模式
*
* date:2023-9-17
*/
#include "proxy.h"
int main()
{
Shop* buyer = new Buyer();
Shop* proxy = new Proxy(buyer);
proxy->buy();
}
运行截图: