定义:为其他对象提供一种代理以控制对这个对象的访问
应用创景:优化接口性能
优点:职责清晰,高扩展性,智能化
缺点:造成请求的处理速度慢,实现复杂
注意:如果使用代理模式,不能改变被代理的类的接口,使用代理模式的目的是为了加强控制
步骤:
1、代理类和被代理类有相同的父类
2、代理类内部含有被代理类的指针
3、代理类提供接口来调用背部被代理类的接口
4、外部使用时,直接使用代理类的接口来间接操作被代理类
cpp
//1、抽象被代理类
class AbstractProxyed {
public:
virtual ~AbstractProxyed() = default;
//抽象接口
virtual void doSomething() = 0;
};
//2、具体的被代理者
class Proxyed1 :public AbstractProxyed
{
public:
void doSomething() override
{
cout << "我是被代理者!" << endl;
}
};
//3、代理也要继承自被代理类,
class Proxy :public AbstractProxyed
{
public:
Proxy(AbstractProxyed* p) :proxyed(p)
{
}
//重写被代理类的接口,在这个接口中 间接调用被代理类的 接口
void doSomething() override
{
cout << "我是代理者,我来代替你访问被代理者" << endl;
proxyed->doSomething();
}
private:
//内部含有被代理类的指针
AbstractProxyed* proxyed;
};
int main()
{
//外部使用
//1、创建被代理类
Proxyed1* a = new Proxyed1();
//2、创建他的代理类
Proxy* proxy = new Proxy(a);
//3、使用代理类来间接访问被代理类
proxy->doSomething();
return 0;
}