(本博客旨在个人总结回顾)
1、详情:
代理模式:为其他对象提供一个代理以控制对这个对象的访问。
说明:
优点: ①职责清晰。 ②高扩展性。 ③智能化。
缺点: ①由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 ②实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
使用场景:按职责来划分,通常有以下使用场景: ①远程代理。 ②虚拟代理。 ③Copy-on-Write 代理。 ④保护(Protect or Access)代理。 ⑤Cache代理。 ⑥防火墙(Firewall)代理。 ⑦同步化(Synchronization)代理。 ⑧智能引用(Smart Reference)代理。
2.1、UML类图:
2.2、例子源码
stdafx.h
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
#include <iostream>
using namespace std;
// TODO: 在此处引用程序需要的其他头文件
Object.h
#pragma once
class Object
{
public:
Object();
virtual ~Object();
public:
virtual void Operation() = 0;
};
Object.cpp
#include "stdafx.h"
#include "Object.h"
Object::Object()
{
}
Object::~Object()
{
}
RealObject.h
#pragma once
#include "Object.h"
class RealObject :
public Object
{
public:
RealObject();
~RealObject();
public:
void Operation();
};
RealObject.cpp
#include "stdafx.h"
#include "RealObject.h"
RealObject::RealObject()
{
}
RealObject::~RealObject()
{
}
void RealObject::Operation()
{
cout <<"真实的操作!" <<endl;
}
Proxy.h
#pragma once
#include "Object.h"
#include "RealObject.h"
class Proxy :
public Object
{
public:
Proxy();
~Proxy();
public:
void Operation();
private:
RealObject* m_pRealObject;
};
Proxy.cpp
#include "stdafx.h"
#include "Proxy.h"
Proxy::Proxy()
: m_pRealObject(NULL)
{
}
Proxy::~Proxy()
{
if (NULL != m_pRealObject)
{
delete m_pRealObject;
m_pRealObject = NULL;
}
}
void Proxy::Operation()
{
if (NULL == m_pRealObject)
{
m_pRealObject = new RealObject();
}
m_pRealObject->Operation();
}
调用代码
ProxyPatternMemo.cpp
// ProxyPatternMemo.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "Proxy.h"
int _tmain(int argc, _TCHAR* argv[])
{
Proxy proxy;
proxy.Operation();
system("pause");
return 0;
}