设计模式的解析和实现(C++)之十-Proxy模式
来源:互联网 发布:陈小春应采儿 知乎 编辑:程序博客网 时间:2024/06/04 17:50
为其他对象提供一种代理以控制对这个对象的访问。
UML结构图:
抽象基类:
1)Subject:定义了Proxy和RealSubject的公有接口,这样就可以在任何需要使用到RealSubject的地方都使用Proxy.
解析:
Proxy其实是基于这样一种时常使用到的技术-某个对象直到它真正被使用到的时候才被初始化,在没有使用到的时候就暂时用Proxy作一个占位符。这个模式实现的要点就是Proxy和RealSubject都继承自Subject,这样保证了两个的接口都是一致的。
实现:
1)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
2)Proxy.cpp
|
#include "Proxy.h"
#include <iostream>
RealSubject::RealSubject()
{
std::cout << "Constructing a RealSubjectn";
}
void RealSubject::Request()
{
std::cout << "Request By RealSubjectn";
}
Proxy::Proxy()
: m_pRealSubject(NULL)
{
std::cout << "Constructing a Proxyn";
}
Proxy::~Proxy()
{
delete m_pRealSubject;
m_pRealSubject = NULL;
}
void Proxy::Request()
{
// 需要使用RealSubject的时候才去初始化
if (NULL == m_pRealSubject)
{
std::cout << "Request By Proxyn";
m_pRealSubject = new RealSubject();
}
m_pRealSubject->Request();
}
#include "Proxy.h"
#include <stdlib.h>
int main()
{
Subject* pProxy = new Proxy();
pProxy->Request();
delete pProxy;
system("pause");
return 0;}
- 常见设计模式的解析和实现(C++)之十-Proxy模式
- 常见设计模式的解析和实现(C++)之十-Proxy模式
- 常见设计模式的解析和实现(C++)之十-Proxy模式
- 常见设计模式的解析和实现(C++)之十-Proxy模式
- 设计模式的解析和实现(C++)之十-Proxy模式
- 常见设计模式的解析和实现(C++)之二十-Visitor模式
- 程序基础设计模式的解析和实现(C++)之二十-Visitor模式
- 常见设计模式的解析和实现(C++)之二十-Visitor模式
- 常见设计模式的解析和实现(C++)之二十-Visitor模式
- 设计模式的解析和实现(C++)之二十-Visitor模式
- 设计模式解析和实现(C++, java)之十-singleton模式
- 设计模式解析和实现(C++, java)之二十--状态(state)模式
- 设计模式解析和实现(C++)之十五-Observer模式
- 设计模式解析和实现(C++)之八-Composite模式
- 设计模式解析和实现(C++)之十五-Observer模式
- 设计模式解析和实现(C++)之十九-Memento模式
- 常见设计模式的解析和实现(C++)---Adapt模式
- 设计模式的解析和实现(C++)之一-Factory模式
- C#上机 第十周 单选按钮和复选框
- 加盟商必须知道的收银知识
- Tab与TabHost详细教程
- 学习设计模式——单例模式
- smarty变量调节器
- 设计模式的解析和实现(C++)之十-Proxy模式
- 店门的店长必须要操作和掌握的知识和店面桌面图标解释
- ios开发点滴
- 后面的打印机 和显示器 升级后有什么区别
- 我的OpenCL学习之路(2)——解决Error:“无法定位程序输入点XXX于动态链接库OpenCL.dll上”
- Android书籍翻页效果
- 打黑真需尚方剑:大同煤运黑洞无人监管
- eclipse改变默认的类的注释
- JavaScript 教程