0
点赞
收藏
分享

微信扫一扫

设计模式-结构型-代理

#pragma once

#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


#include "StdAfx.h"
#include "proxy_impl.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();
}


// Proxy.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include "proxy_impl.h"
#include <stdlib.h>

//为其他对象提供一种代理以控制对这个对象的访问。
int _tmain(int argc, _TCHAR* argv[])
{
Subject* pProxy = new Proxy();
pProxy->Request();

delete pProxy;
system("pause");

return 0;
}


举报

相关推荐

0 条评论