首页 / 设计模式 / 设计模式之---代理模式实例
设计模式之---代理模式实例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了设计模式之---代理模式实例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3220字,纯文字阅读大概需要5分钟。
内容图文
代理(Proxy)模式给某一个对象提供一个代理或占位符,以控制对这个对象的访问。Proxy模式代理和实际执行者派生于共同的接口,代理拥有实际执行者的实例,代理的每一个函数(接口的实现函数),直接调用实际执行者的对应接口函数。有时我们不能直接引用另一个对象,或者是需要使用的对象很复杂或者需要很长时间去构造,这时就可以使用代理模式(Proxy)。
以下是我联想实际生活并结合对Proxy的理解,想到的使用代理模式(Proxy)的两种应用情景:
1、控制对象访问:一个对象只有有限的访问权限,代理模式(Proxy)可以验证用户的权限。
例:我们在网购时知道订单一旦被创建,只有订单创建者才可以修改订单中的数据,其他人则无权修改。下面是通过Proxy设计模式控制对象的访问的类图。
实现如下:
1 class Order_AbstractClass 2 { 3 public : 4 string getProductName(); 5 void setProductName(string productName,string consumer); 6int getOrderID(); 7void setOrderID(int orderID, string consumer); 8string getOrderCreater (); 9void setOrderCreater (string orderCreater, string consumer); 10} 11class Order: Order_AbstractClass { 12private: 13string productName; 14int orderID; 15string orderCreater; 16public : 17 Order(string productName,int orderID,string orderCreater) 18 { 19 productName=productName; 20 orderID = orderID; 21 orderCreater = orderCreater; 22 } 23int getOrderID () { 24return orderID; 25 } 26string getOrderCreater() { 27return orderCreater; 28 } 29string getProductName() { 30return productName; 31 } 32void setOrderID(int orderID, string consumer) 33{ 34 OrderID = orderID; 35 } 36void setOrderCreater (string orderCreater, string consumer) { 37 orderCreater=orderCreater; 38 } 39void setProductName(string productName, string consumer) { 40 productName=productName; 41 } 42} 43class OrderProxy: Order_AbstractClass { 44private: 45 Order order; 46public: 47OrderProxy(Order realorder) { 48 order=realorder; 49 } 50int getOrderID() { 51return order.getOrderID (); 52 } 53string getOrderCreater() { 54return order.getOrderCreater (); 55 } 56string getProductName() { 57return order.getProductName(); 58 } 59void setOrderID(int orderID, string consumer) { 60if(consumer!=NULL && consumer.equals(this.getOrderCreater())){ 61 order.setOrderID(orderID, consumer); 62 cout<<"恭喜您修改成功"<<endl; 63 }else{ 64 cout<<"您无权修改订单号"<<endl; 65 }} 66void setOrderCreater(string orderCreater, string consumer) { 67if(consumer!=null && consumer.equals(this.getOrderCreater ())){ 68 order.setOrderCreater(orderCreater, consumer); 69 cout<<"恭喜您修改成功"<<endl; 70 }else{ 71 cout<<"您无权修改订单创建者"<<endl; 72 }} 73void setProductName(string productName, string consumer) { 74if(consumer!=null && consumer.equals(this.getOrderCreater ())){ 75 order.setProductName(productName, consumer); 76 cout<<"恭喜您修改成功"<<endl; 77 }else{ 78 cout<<"您无权修改产品名称"<<endl; 79 }} 80void main(){ 81 Order_AbstractClass order=new OrderProxy(new Order("C++设计模式",2,"小四")); 82 order.setOrderID(123, "小五"); 83 order.setOrderID(123, "小四"); 84 order.setProductName("C++编程", "小四"); 85 order.setOrderCreater("小七", "小六"); 86 }
2、 作为远程代理使用外域的对象:有些情况下,一个客户不想或者不能够直接引用一个对象,使用Proxy代理模式的代理对象可以在客户端和目标对象之间起到中介的作用。
例:代理服务器的功能就是代理网络用户去取得网络信息。在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,须送出Request信号来得到回答,然后对方再把信息以bit方式传送回来。代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,否则,通过从Web服务器获取所需信息,这样能显著提高浏览速度和效率。如下图所示:
原文:http://www.cnblogs.com/yvictoryr/p/3660028.html
内容总结
以上是互联网集市为您收集整理的设计模式之---代理模式实例全部内容,希望文章能够帮你解决设计模式之---代理模式实例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。