[设计形式]Proxy代理模式

[设计模式]Proxy代理模式

proxy代理模式

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

[设计形式]Proxy代理模式

Proxy其实是基于这样一种时常使用到的技术——某个对象直到它真正被使用到的时候才被初始化,在没有使用到的时候就暂时用proxy作一个占位符。这个模式实现的要点就是proxyrealSubject都继承自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;
}