设计模式学习笔记(C++实现)(十三)--代理模式

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.《设计模式:可复用面向对象软件的基础》

猜你喜欢

转载自blog.csdn.net/u014337397/article/details/80464482