代理模式非常简单。代理模式为其他对象提供一种代理以控制这个对象的访问。
Subject(抽象主题角色): 真实主题与代理主题的共同接口
RealSubject(真实主题角色): 定义了代理角色所代表的真实对象。
Proxy(代理主题角色): 含有对真实主题角色的引用,代理角色通常在将客户端调用传递给真实主题对象之前或者之后执行某些操作,而不是单纯返回真实的对象。
a中包含b类;a、b类中实现协议类;
(现在很流行的电商软件就很喜欢这个模式)
代码奉上。
#include<iostream>
#include<string>
using namespace std;
class Subject
{
public:
Subject() {}
virtual void salesCar() = 0;
};
class Seller : public Subject
{
public:
Seller () {}
//卖车
void salesCar()
{
cout<< "卖车" <<endl;
}
};
class TaoBao : public Subject
{
public:
TaoBao (Subject* sub): m_subject(sub){}
//卖车,但是除了普通的卖车,我们还可以做别的事情,比如搞促销
void salesCar()
{
m_subject->salesCar();
promotion();
}
public:
//促销
void promotion()
{
cout<< "淘宝双十一打折促销!!!"<<endl;
}
private:
Subject* m_subject;
};
int main()
{
Seller* seller = new Seller();
TaoBao* taobao = new TaoBao(seller);
//通过淘宝作为代理来卖车
taobao->salesCar();
delete seller;
delete taobao;
return 0;
}