概述: |
代理模式是一种结构型模式,在某些情况下,一个对象不适合或者不能直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用
优点: |
-
代理模式能够将客户与真正被调用的对象分离,降低了耦合度
-
客户端可以通过代理与多个目标对象交互,目标对象的修改和扩展客户端并不感知,扩展性和维护性强
缺点: |
-
在客户端和真正目标对象之间增加代理对象,请求速度有可能会变慢
-
增加代理会使系统复杂度变高
使用场景: |
-
代理服务器,通过代理服务器访问无法访问的服务器
-
可以在代理服务器实现负载均衡、数据缓存
UML类图: |
实例: |
#include <iostream>
// 出租方
class Lessor{
public:
virtual void rentHouse()=0;
};
// 房东
class LandLord : public Lessor{
public:
virtual void rentHouse(){
std::cout << "房东出租房子" << std::endl;
}
};
// 中介
class HouseProxy : public Lessor{
public:
virtual void rentHouse(){
std::cout << "中介找房东租房子" << std::endl;
landlord.rentHouse();
}
private:
LandLord landlord;
};
//租客
class Renter{
public:
void findHouse(){
std::cout << "租客找中介租房子" << std::endl;
lessor.rentHouse();
}
private:
HouseProxy lessor;
};
int main(){
Renter renter;
renter.findHouse();
return 0;
}