代理模式
1、代理模式简介
代理模式按照使用场景来划分可分为多种,如:远程代理、虚拟代理、防火墙代理、Cache代理及智能引用代理等。但是不管是哪种代理模式只是在使用场景上有所区分,而在具体的实现思想上则大致相同。
2、代理模式的使用场景
主要是为其他对象提供一种代理以控制对这个对象的访问。如现有A对象和C对象,C对象想要访问A对象,在这个流程中就可按照需求及场景来使用代理模式,通过引用B对象来实现C对象对A对象的访问(C->B->A)
3、和适配器及装饰者模式的区别
适配器模式主要是为了解决两个类或工程中需要互相耦合但是接口不兼容的问题,适配器模式对其中一个类加一层封装之后提供可调用的接口给另一个类。从而达到接口兼容的目的;装饰器模式则是在原有的类中增加新的功能,在不违背六大设计原则的前提下实现扩展的目的;相比较两者而言,代理类模式则主要是相当于增加了一个中间层,在中间层做一些必要的处理。
4、简要举例
假如你需要到车站去买票,但是不想自己买,而是找黄牛去帮你买,那么在这个过程中,黄牛就充当了一个代理者的模式,因为你要先经过黄牛才能接触到票,实际在使用代理模式时也是如此:例如在软件登录时可以先由代理进行token或合规性的验证。
//共同继承的基类
class Base
{
public:
Base(){}
virtual void BuyTicket() = 0;
};
//被代理的类
class YourSelf : Base
{
public:
YourSelf(){}
void BuyTicket()
{
cout<<"买票"<<endl;
}
};
//代理类
class Cattle : Base
{
public:
Cattle(Base* factory)
{
m_base = base;
}
void BuyTicket()
{
m_base->BuyTicket();
}
private:
Base* m_base;
};
//调用方法
int main()
{
Base* base = new YourSelf();
Cattle* proxy = new Cattle(base);
proxy->BuyTicket();
return 0
}