建网站的公司不肯签合同,wordpress排版,京津冀协同发展调研报告,聊天软件解释说明#xff1a;代理模式#xff08;Proxy Pattern#xff09;为其他对象提供了一种代理#xff0c;以控制对这个对象的访问。在某些情况下#xff0c;一个对象不适合或者不能直接引用另一个对象#xff0c;而代理对象可以在客户端和目标对象之间起到中介的作用。 抽… 解释说明代理模式Proxy Pattern为其他对象提供了一种代理以控制对这个对象的访问。在某些情况下一个对象不适合或者不能直接引用另一个对象而代理对象可以在客户端和目标对象之间起到中介的作用。 抽象主题Subject通过接口或抽象类声明真实主题和代理对象事项的业务方法 真实主题RealSubject实现了抽象主题中额具体业务是代理对象所代表的真实对象是最终要引用的对象 代理Proxy提供了与真实主题相同的接口其内部含有对真实主题的引用它可以访问、控制或扩展真实主题的功能 优点 代理模式能将代理对象与真正被调用的对象分离在一定程度上降低了系统的耦合度。 在客户端和目标对象之间代理起到一个中介作用这样可以保护目标对象。在对目标对象调用之前代理对象也可以进行其他操作。 缺点 这种模式引入了另一个抽象层这有时可能是一个问题。如果真实主题被某些客户端直接访问并且其中一些客户端可能访问代理类这可能会导致不同的行为。 由于在客户端和真实主题之间增加了代理对象因此有些类型的代理模式可能会造成请求的处理速度变慢。 实现代理模式需要额外的工作有些代理模式的实现非常复杂 适用场景 根据目的和实现方式的不同代理模式可分为很多种常见的有 远程代理Remote Proxy 为一个位于不同地址空间的对象提供一个本地代理对代理的方法调用会导致对远程对象的方法调用。ATM 就是一个例子ATM 可能会持有存在于远程服务器中的银行信息的一个代理对象。 虚拟代理Virtual Proxy 使用虚拟代理代理可以作为一个资源消耗较大的对象的代表。虚拟代理经常延迟对象的创建直到需要为止。在创建对象之前及创建对象过程中虚拟代理也可以作为对象的代理之后代理将请求直接委托给 RealSubject。 保护代理Protection Proxy 根据访问权限可以使用保护代理来控制对资源的访问。例如有一个员工对象保护代理可以允许普通员工调用对象的某些方法管理员调用其他方法。 缓冲代理Cache Proxy 为某一个目标操作的结果提供临时的存储空间以便多个客户端可以共享这些结果。 智能引用代理Smart Reference Proxy 当一个对象被引用时提供一些额外的操作例如将对象被调用的次数记录下来。 #pragma once
#include iostream
// 电信运营商
class ITelco
{
public:virtual ~ITelco() {}virtual void Recharge(int money) 0; // 充值
};
// 中国移动
class CMCC : public ITelco
{
public:void Recharge(int money) override {std::cout Recharge money;}
};
// 代理点
class Proxy : public ITelco
{
public:Proxy() : m_pCMCC(NULL) {}~Proxy() { delete m_pCMCC; }// 低于 50 不充void Recharge(int money) override {if (money 50) {if (m_pCMCC NULL)m_pCMCC new CMCC();m_pCMCC-Recharge(money);}else {std::cout Sorry, too little money std::endl;}}
private:CMCC* m_pCMCC;
};#include subject.h
#ifndef SAFE_DELETE
#define SAFE_DELETE(p) { if(p){delete(p); (p)NULL;} }
#endif
int main()
{Proxy* proxy new Proxy();proxy-Recharge(20);proxy-Recharge(100);SAFE_DELETE(proxy);getchar();return 0;
}