码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之- 代理模式(Proxy Pattern)

时间:2018-10-03 00:26:55      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:err   new   span   客户   代理   bool   更改   ios   代理模式   

代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。
在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
 
C++代码实现:
#include<iostream>
using namespace std;


//抽象类,抽象的主题类
class AbstractServer {
public:
    virtual void Request() = 0;
};


//真正主题类,具体提供服务的类
class RealServer:public AbstractServer {
    virtual void Request() {
        cout << "Server start..." << endl;
    }
 
};


//代理服务器,非真正的服务器,访问真正服务器必须通过代理服务器
class ProxyServer :public AbstractServer {
public:
    ProxyServer(string name, string pwd) {
        this->name = name;
        this->pwd = pwd;
        this->server = new RealServer;
    }

    // 和 真正主题类实现共同的接口,对外可以提供一致的接口!
    void Request() {
        PreRequest();

        if (!CheckUser()) {
            cout << "Username or password error..." << endl;
            return;
        }

        cout << "Request success..." << endl;
        this->server->Request();
        
        PostRequest();
    }
private:
    //访问服务器前 进行的动作,可以控制对真实主题类的访问
    bool CheckUser() {
        if ("admin" == this->name && "123456" == this->pwd) {
            return true;
        }
        return false;
    }
    //真正访问服务器前 进行的动作,这里进行安全
    void PreRequest() {
        cout << "Entering server..." << endl;
    }
    //访问服务器之后 进行的动作
    void PostRequest() {
        cout << "Leaving server..." << endl;
    }
    string name;
    string pwd;
private:
    AbstractServer* server;
};


//客户端 通过登录代理服务器 访问 真实服务器
int main(int argc, char **argv) {
    AbstractServer *proxy = new ProxyServer("admin", "123456");//登录代理服务器
    proxy->Request();//通过代理服务器 访问真正服务器
    return 0;
}

类图:

技术分享图片

 

代理模式感觉似曾相识,功能和装饰模式和适配器模式相差不多。

Proxy Pattern感觉更加强调一个类对另一个类的代理使用(原接口不变),功能扩展倒是其次的。

适配器模式则是更改了原始类对外的接口,使之呈现不同的功能。

装饰模式则更加强调装饰的多样性,每个装饰类都能够实现特异的功能,实现了定向多样扩展类功能的作用。

设计模式之- 代理模式(Proxy Pattern)

标签:err   new   span   客户   代理   bool   更改   ios   代理模式   

原文地址:https://www.cnblogs.com/J1ac/p/9738127.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!