Proxy模式

Proxy模式
 
Intention:
    为其他对象提供一种代理以控制对这个对象的访问。
When:
    1、创建开销大的对象时,比如显示一幅大的图片,我们将这个创建过程交给Proxy去完成(Virtual Proxy)。
    2、为网络上的对象创建一个局部的本地代理,比如要操作一个网络上的一个对象(特别是网络性能不好时),可将这个操纵的过程
交给一个Proxy完成(Remote Proxy).
    3、对对象进行访问控制时,比如论坛中不同权限的用户有不同的操作权限,将这个工作交给一个Proxy完成(Protection Proxy).
    4、智能指针.
C++ Code Example:

//proxy.h
#ifndef PROXY_H
#define PROXY_H

class Subject{

public:
    virtual ~Subject();
    virtual void Request() = 0;
protected:
    Subject();
};

class ConcreteSubject : public Subject{

public:
    ConcreteSubject();
    ~ConcreteSubject();
    void Request();
};

class Proxy{

public:
    Proxy();
    Proxy(Subject* sub);
    ~Proxy();
    void Request();
private:
    Subject* m_sub;
};

#endif // PROXY_H

//proxy.cpp
#include "proxy.h"
#include <iostream>

using std::cout;
using std::endl;

Subject::Subject(){

}

Subject::~Subject(){

}

ConcreteSubject::ConcreteSubject(){

}

ConcreteSubject::~ConcreteSubject(){

}

void ConcreteSubject::Request(){

    cout << "ConcreteSubject::Request" << endl;
}

Proxy::Proxy(){

}

Proxy::Proxy(Subject *sub){

    m_sub = sub;
}

Proxy::~Proxy(){

    delete m_sub;
}

void Proxy::Request(){

    cout << "Proxy::Request" <<endl;
    m_sub->Request();
}

//main.cpp
#include "proxy.h"
#include <iostream>

int main()
{
    Subject* sub = new ConcreteSubject();
    Proxy *p = new Proxy(sub);
    p->Request();

    return 0;
}

 
 
Discussion:
    从代码中可以看到,Proxy的Request请求实际上是交给了sub来执行。
    Proxy模式最大的好处是实现了逻辑和实现的彻底解耦。





                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值