[设计模式]Proxy代理模式
proxy代理模式
为其他对象提供一个代理以控制对这个对象的访问。
Proxy其实是基于这样一种时常使用到的技术——某个对象直到它真正被使用到的时候才被初始化,在没有使用到的时候就暂时用proxy作一个占位符。这个模式实现的要点就是proxy和realSubject都继承自Subject,这样保证了两个的接口都是一致的。
Proxy模式最大的好处就是实现了逻辑和实现的彻底解耦。
小demoproxy.h
#ifndef PROXY_H#define PROXY_H// 定义了Proxy和RealSubject的公有接口,// 这样就可以在任何需要使用到RealSubject的地方都使用Proxy.class Subject{public:Subject(){}virtual ~Subject(){}virtual void Request() = 0;};// 真正使用的实体class RealSubject : public Subject{public:RealSubject();virtual ~RealSubject(){}virtual void Request();};// 代理类,含有一个指向RealSubject对象的指针class Proxy : public Subject{public:Proxy();virtual ~Proxy();virtual void Request();private:RealSubject* m_pRealSubject;};#endif
proxy.cpp
#include "Proxy.h"#include <iostream>RealSubject::RealSubject(){std::cout << "Constructing a RealSubject\n";}void RealSubject::Request(){std::cout << "Request By RealSubject\n";}Proxy::Proxy() : m_pRealSubject(NULL){std::cout << "Constructing a Proxy\n";}Proxy::~Proxy(){delete m_pRealSubject;m_pRealSubject = NULL;}void Proxy::Request(){// 需要使用RealSubject的时候才去初始化if (NULL == m_pRealSubject){std::cout << "Request By Proxy\n";m_pRealSubject = new RealSubject();}m_pRealSubject->Request();}
main.cpp
#include "Proxy.h"#include <stdlib.h>int main(){Subject* pProxy = new Proxy();pProxy->Request();delete pProxy;system("pause");return 0;}