设置模式之代理模式(Proxy Pattern) (C++源代码)
2008-11-28 17:30
387 查看
代理模式将原来类的真实的操作从调用者的视野里移开,可能还增加了一些调用者觉察不到的操作,不过从类设计者的立场来看这些都不影响调用者使用原先类的功能,为了保护一个类而多生成一个新类,不敢说思想十分正确,至少感到拐了一个弯才实现自己的目的有些不爽。 可能代理模式真正发挥威力的地方是从此衍生的动态代理方法吧。
// ProxyParenter.cpp : Defines the entry point for the console application.
//
//代理模式是对象的结构模式,操作的目标主要是类对象
//下面是比较经典又精简的一个例子:
#include "stdafx.h"
#include <iostream>
using namespace std;
//抽象角色
class ISubject
{
public:
ISubject()
{
}
virtual ~ISubject()
{
}
public:
virtual void Request() = 0;
};
//真实角色:实现了Subject的request()方法
class CSubject:public ISubject
{
public:
CSubject()
{
}
virtual ~CSubject()
{
}
public:
virtual void Request()
{
cout << "CSubject::Request()" << endl;
}
};
//代理角色
class CProxySubject:public ISubject
{
public:
CProxySubject(int nId)
{
this->m_nId = nId;
}
virtual ~CProxySubject()
{
}
public:
virtual void Request()
{
if (!this->PreRequest(this->m_nId))
{
cout << "request reject!" << endl;
return;
}
this->m_objSub.Request();
this->AfterRequest();
}
void SetId(int nId)
{
this->m_nId = nId;
}
int GetId()
{
return this->m_nId;
}
private:
bool PreRequest(int nId)
{
if ( (nId > 0) && (nId <= 100) )
{
return true;
}
return false;
}
void AfterRequest()
{
cout << "After Do Request!" << endl;
}
private:
CSubject m_objSub;
int m_nId;
};
int main()
{
ISubject* pObj = NULL;
int nId = 0;
cout << "please input your id:" << endl;
cin >> nId;
pObj = new CProxySubject(nId);
if (NULL != pObj)
{
pObj->Request();
}
//clear
if (NULL != pObj)
{
delete pObj;
pObj = NULL;
}
}
// ProxyParenter.cpp : Defines the entry point for the console application.
//
//代理模式是对象的结构模式,操作的目标主要是类对象
//下面是比较经典又精简的一个例子:
#include "stdafx.h"
#include <iostream>
using namespace std;
//抽象角色
class ISubject
{
public:
ISubject()
{
}
virtual ~ISubject()
{
}
public:
virtual void Request() = 0;
};
//真实角色:实现了Subject的request()方法
class CSubject:public ISubject
{
public:
CSubject()
{
}
virtual ~CSubject()
{
}
public:
virtual void Request()
{
cout << "CSubject::Request()" << endl;
}
};
//代理角色
class CProxySubject:public ISubject
{
public:
CProxySubject(int nId)
{
this->m_nId = nId;
}
virtual ~CProxySubject()
{
}
public:
virtual void Request()
{
if (!this->PreRequest(this->m_nId))
{
cout << "request reject!" << endl;
return;
}
this->m_objSub.Request();
this->AfterRequest();
}
void SetId(int nId)
{
this->m_nId = nId;
}
int GetId()
{
return this->m_nId;
}
private:
bool PreRequest(int nId)
{
if ( (nId > 0) && (nId <= 100) )
{
return true;
}
return false;
}
void AfterRequest()
{
cout << "After Do Request!" << endl;
}
private:
CSubject m_objSub;
int m_nId;
};
int main()
{
ISubject* pObj = NULL;
int nId = 0;
cout << "please input your id:" << endl;
cin >> nId;
pObj = new CProxySubject(nId);
if (NULL != pObj)
{
pObj->Request();
}
//clear
if (NULL != pObj)
{
delete pObj;
pObj = NULL;
}
}
相关文章推荐
- (C++实现)——代理模式(Proxy Pattern)
- 我所理解的设计模式(C++实现)——代理模式(Proxy Pattern)
- C++ 代理模式(Proxy Pattern)
- 代理对象我所理解的设计模式(C++实现)——代理模式(Proxy Pattern)
- 我所理解的设计模式(C++实现)——代理模式(Proxy Pattern)
- 结构型模式之代理模式(Proxy Pattern)C++实现
- 设计模式---代理模式(c++实现)
- 设计模式C++实现(8)——代理模式
- Net设计模式实例之代理模式(Proxy Pattern)
- Java设计模式——代理模式(Proxy Pattern)
- C++与设计模式(8)——代理模式
- 第 2 章 代理模式【Proxy Pattern】
- 设计模式C++版:第七式代理模式
- 设计模式C++实现(8)——代理模式
- 设计模式--代理模式实现C++
- Net设计模式实例之代理模式(Proxy Pattern) 推荐
- C++设计模式之代理模式
- 设计模式—静态代理模式和动态代理模式(Proxy Pattern)
- 设计模式C++学习笔记之二(Proxy代理模式)
- 大话设计模式C++实现-文章7章-代理模式