您的位置:首页 > 运维架构 > 网站架构

设计模式--Proxy 模式

2016-09-19 09:12 429 查看

Proxy 模式

转自:http://itlab.idcquan.com/c/cc/basic/200904/781475.html

作用:
    为其他对象提供一种代理以控制对这个对象的访问。
    UML结构图:



    抽象基类:
    1)Subject:定义了Proxy和RealSubject的公有接口,这样就可以在任何需要使用到RealSubject的地方都使用Proxy.
    解析:
    Proxy其实是基于这样一种时常使用到的技术-某个对象直到它真正被使用到的时候才被初始化,在没有使用到的时候就暂时用Proxy作一个占位符。这个模式实现的要点就是Proxy和RealSubject都继承自Subject,这样保证了两个的接口都是一致的。
    实现:
    1)Proxy.h

 /**//********************************************************************

    created:    2006/07/26

    filename:     Proxy.h

    author:        李创

                http://www.cppblog.com/converse/

    purpose:    Proxy模式的演示代码

*********************************************************************/

#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
|
 /**//********************************************************************

    created:    2006/07/26

    filename:     Proxy.cpp

    author:        李创

                http://www.cppblog.com/converse/

    purpose:    Proxy模式的演示代码

*********************************************************************/

#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();

}

    3)Main.cpp
 /**//********************************************************************

    created:    2006/07/26

    filename:     Main.cpp

    author:        李创

                http://www.cppblog.com/converse/

    purpose:    Proxy模式的测试代码

*********************************************************************/

#include "Proxy.h"

#include <stdlib.h>

int main()

{

    Subject* pProxy = new Proxy();

    pProxy->Request();

    delete pProxy;

    system("pause");

    return 0;

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息