1.代理模式简介
- 英文名称
Proxy - 主要目的
为其他对象提供一种代理以控制对这个对象的访问。 - 使用场景
1.在需要用比较通用和复杂的对象指针代替简单的指针时,可以用代理模式。
2.代理模式代码示例
- 测试平台
1.开发语言:C++
2.开发工具:VS2015
3.操作系统:Win7 X64 代码说明
1.Ticket–抽象售票类
2.RailwayStation、C12306–具体售票机构类;
3.Proxy–代理类,用来代替具体的售票机构。注意:
1.本例用代理模式来描述火车票代售机制;
2.利用代理模式,我们可以直接操纵各种实际售票机构进行售票行为;
3.代理模式保存一个引用来访问实体,同时提供一个与抽象类相同的接口,这样就可以使代理能够替代实体。具体代码
#include <iostream>
using namespace std;
//抽象售票机构类
class Ticket
{
public:
virtual void SellTicket() = 0; //抽象售票函数
};
//具体售票机构类,表示火车站
class RailwayStation :public Ticket
{
public:
void SellTicket()
{
cout << "火车站售票中..." << endl;
}
};
//具体售票机构类,表示12306售票软件
class C12306 :public Ticket
{
public:
void SellTicket()
{
cout << "12306售票中..." << endl;
}
};
//代理类
class Proxy :public Ticket
{
public:
Proxy(Ticket* ticker)
{
this->m_pTicket = ticker;
}
void SellTicket()
{
if (this->m_pTicket != NULL)
{
this->m_pTicket->SellTicket();
}
}
private:
Ticket* m_pTicket; //实际购票者
};
int main()
{
//通过火车站买票
Ticket* pRailSta = new RailwayStation();
Proxy* pProxy1 = new Proxy(pRailSta);
pProxy1->SellTicket();
//12306软件购票
Ticket* p12306 = new C12306();
Proxy* pProxy2 = new Proxy(p12306);
pProxy2->SellTicket();
delete pRailSta;
pRailSta = NULL;
delete pProxy1;
pProxy1 = NULL;
delete p12306;
p12306 = NULL;
delete pProxy2;
pProxy2 = NULL;
getchar();
return 0;
}
- 输出结果
栏目导航
上一篇:设计模式学习笔记(C++实现)(十一)–外观模式
下一篇:设计模式学习笔记(C++实现)(十四)–职责链模式
参考文献:
1.《设计模式:可复用面向对象软件的基础》