首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

[设计形式]Proxy代理模式

2013-01-20 
[设计模式]Proxy代理模式proxy代理模式为其他对象提供一个代理以控制对这个对象的访问。 Proxy其实是基于这

[设计模式]Proxy代理模式
proxy代理模式

为其他对象提供一个代理以控制对这个对象的访问。 

[设计形式]Proxy代理模式

Proxy其实是基于这样一种时常使用到的技术——某个对象直到它真正被使用到的时候才被初始化,在没有使用到的时候就暂时用proxy作一个占位符。这个模式实现的要点就是proxy和realSubject都继承自Subject,这样保证了两个的接口都是一致的。

Proxy模式最大的好处就是实现了逻辑和实现的彻底解耦。

小demo

proxy.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;}

 

热点排行