当前位置:首页 > CN2资讯 > 正文内容

代理模式(Proxy)

2天前CN2资讯


代理模式:为另一个对象提供一个替身或占位符以控制这个对象的访问。
(为其它对象提供一种代理以控制对这个对象的访问)

要点:
1.远程代理管理客户和运程对象之间的交互
2.虚拟代理控制访问实例化开销大的对象
3.保护代理基于调用者控制对象方法的访问
4.代理模式有许多变体,例如:缓存代理,同步代理,防火墙代理和写入时复制代理
5.代理在结构上类似装饰者,但是目的不同
6.装饰者模式为对象加上了行为,而代理则是控制访问
7.和其它的包装者(wrapper)一样,代理会造成你设计中类的数目增加

应用场景:
1.远程代理:为一个对象在不同的地址空间提供局部代理.这样可以隐藏一个对象存在于不同地址空间的事实
2.虚拟代理:是根据需要创建开销很大的对象.通过它来存放实例化需要很长时间的真实对象
3.安全代理:用来控制真实对象访问的权限,用于对象有不同的访问权限的时候
4.智能指引:指当调用真实的对象时,代理处理另外一些事,如计算真实对象的引用次数,这样当该对象没有引用时,可以自动释放它;或当第一次引用一个持久对象时,将它装入内存;或在访问一个实际对象前,检查是否已经锁定它,以确保其他对象不能改变它.它们都是通过代理在访问一个对象时附加一些内存处理(ps:智能指针的实现是用的代理模式?回头再看下boost的源码吧,有点忘了)

#include<iostream> using namespace std; class A{ private: int num; public: A(int n):num(n){} int getNum()const{ return num; } }; class AProxy{ private: A* a; public: AProxy(A* aa):a(aa){} int getNum()const{ return a->getNum(); } }; int main(){ AProxy *proxy = new AProxy(new A(10)); cout << proxy->getNum() << endl; }



强制代理:



[img]http://dl2.iteye.com/upload/attachment/0100/8460/a905e68f-bb50-326c-9cc9-bf14278c7cdd.png[/img]



#include <iostream> using namespace std; class DB{ public: DB(){} virtual ~DB(){} virtual int add()=0; virtual int del()=0; }; class MySQLDB:public DB { public: int add() { cout << "mysql add" << endl; return 0; } int del() { cout << "mysql del" << endl; return 0; } }; class OracleDB:public DB { public: int add() { cout << "oracle add" << endl; return 0; } int del() { cout << "oracle del" << endl; return 0; } }; class DBProxy { public: static DBProxy* getInstance() { static DBProxy dbProxy; return &dbProxy; } void setDB(DB* db){ mDB = db; } int add() { if(mDB==NULL) { cout << "无法add,请设置db" << endl; return -1; } return mDB->add(); } int del() { if(mDB==NULL) { cout << "无法del,请设置db" << endl; return -1; } return mDB->del(); } private: DBProxy(){ mDB = NULL; } private: DB* mDB; }; int main() { DBProxy* dbProxy = DBProxy::getInstance(); dbProxy->add(); dbProxy->del(); dbProxy->setDB(new MySQLDB); dbProxy->add(); dbProxy->del(); dbProxy->setDB(new OracleDB); dbProxy->add(); dbProxy->del(); } 无法add,请设置db 无法del,请设置db mysql add mysql del oracle add oracle del
    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/24315.html

    分享给朋友:

    “代理模式(Proxy)” 的相关文章

    Windows SSH 连接云服务器的安全与便捷指南

    当我谈到SSH时,首先想到的是它的安全性和便利性。SSH,或者说安全外壳协议(Secure Shell),是一种加密网络传输协议。它的主要目的是在不安全的网络环境中,提供一个安全的传输机制。这对远程管理和数据传输尤其重要。实际上,SSH相当于在客户机和服务器之间创建了一个安全的隧道,确保我发送和接收...

    CentOS 7 如何有效限制服务器带宽

    在CentOS 7系统中,限制服务器带宽不仅关乎到网络性能,更影响到资源的公平利用。网络资源共享在现在的许多应用中显得尤为重要。一旦带宽没有得到合理控制,某些用户或应用可能会消耗过多的网络,导致其他用户受到影响。因此,我深信带宽限制成为了一种有效的网络管理方法。 举个简单的例子,想象一下在公司内网中...

    远程VPS优选指南:高效管理虚拟专用服务器的最佳实践

    随着远程工作的普及和数字化转型的加速,远程VPS(虚拟专用服务器)逐渐成为许多企业和个人的首选工具。VPS通过虚拟化技术,让我们能够在一台物理服务器上同时运行多个独立的操作系统,这种灵活性使得用户能够像管理独立服务器那样,远程登录和管理自己的虚拟环境。每天都有更多的人意识到,拥有一个VPS可以为他们...

    提升美国家庭网络安全与光纤宽带普及的最佳策略

    在当今这个数字化时代,家庭网络的建设与发展显得愈发重要。美国家庭对于网络的依赖程度日渐加深,这不仅仅体现在上网购物、观看视频、游戏娱乐等日常活动中,也体现在工作和学习的方方面面。作为一个普通家庭,我们的生活节奏已经被网络所塑造,无论是为了保持与亲友的联系,还是获取最新的信息,都离不开一个稳定而高效的...

    BT下载机的使用技巧与软件下载推荐

    在数字时代,文件共享变得越来越普遍,BT下载机作为一种基于BitTorrent协议的P2P(Peer-to-Peer)文件共享工具,扮演着重要的角色。我记得第一次接触BT下载机时,发现它的操作不仅简单,还能快速下载大型文件,这让我对它产生了浓厚的兴趣。BT下载机允许用户通过种子文件(.torrent...

    探索锡考克斯:舒适的居住地与丰富的旅游体验

    锡考克斯(Secaucus)是一个坐落于新泽西州的小镇,距离繁华的纽约市仅有不到10公里的路程。这使得锡考克斯成为一个非常吸引人的居住地和旅游目的地。首先,锡考克斯的地理坐标是纬度40.782和经度-74.0676,位于北纬40°46′55″和西经74°4′3″之间。这种优越的地理位置无疑为它的经济...