代理,指的就是一个角色代表另一个角色采取行动,就像现实生活中,微软或联想不会直接把自己的系统或者电脑卖给客户,而是通过代理来完成它的销售业务。而客户,也不用为了买个Office或笔记本而到处去找联想工厂,或者微软公司,它只要找到厂商的销售代理就可以了。

代理模式,就是给某一对象提供代理对象,并由代理对象控制具体对象的引用。

代理模式涉及的角色:

  • 抽象主题角色,声明了代理主题和真实主题的公共接口,使任何需要真实主题的地方能用代理主题替代
  • 代理主题角色,含有真实主题的引用,从而可以在任何时候操作真实主题,代理主题通过提供和真实主题相同的接口,使它们可以随时代替真实主题。代理主题通过持有真实主题的引用,不但可以控制真实主题的创建和删除,还可以在真实主题被调用前进行拦截,或在调用后进行某些操作。
  • 真实代理对象,定义了代理角色所代表的具体对象
/**
*Proxy 代理模式
*//**
*抽象主题(接口)
*/
interface Proxy
{public function request();public function display();
}/**
*真实主题
*/
class RealSubject
{public function request(){echo 'RealSubject request<br/>';}public function display(){echo 'RealSubject display<br/>';}
}
/**
*代理主题
*/
class ProxySubject
{private $_subject = null;public function __construct(){$this->_subject = new RealSubject();}public function request(){$this->_subject->request();}public function display(){$this->_subject->display();}
}//使用
$objProxy = new ProxySubject();
$objProxy->request();
$objProxy->display();

代理模式的工作方式:

首先,因为代理主题和真实主题都实现了共同的接口,这使得我们在不改变原来接口的情况下,只要用真实主题对象的地方,都可以用代理主题来代替。其次,代理主题在客户端和真实主题间起了一个中介作用,利用这个中介平台,我们可以在把客户请求传递给真实主题之前做一些必要的语出里。

有一个很常见的代理模式的使用例子就是大幅图片的浏览控制。在我们常见的网站上浏览图片的信息时,不知道你有没有注意到,图片位置放置的是经过缩小的,当有人要仔细查看这个图片时,可以通过点击图片来激活一个链接,在一个新的网页中打开要看的图片。这样对于提高浏览速度是很有好处的,因为不是每个人都要去仔细看图片上的信息。这种情况就可以用代理模式来全面实现。

我们在浏览器中访问网页时调用的不是真实的装载图片的方法,而是在代理对象中的方法,在这个对象中,先用一个线程向浏览器装载一个缩小版的图片,而在后再使用另一个线程来调用真实的装载大图片的方法将图片加载到本地,当你要浏览这个图片时,将其在新的网页中显示出来。当然,如果在你想浏览的时候图片还没有加载成功,就再启动一个线程来提示信息,知道加载完成。

代理模式能够协调调用者和被调用者,能够在一定程度上降低系统的耦合度。

PHP代理模式Proxy Mode相关推荐

  1. 代理模式(Proxy)简介

    代理模式相对来讲比较简单和容易理解. 一, 代理模式(Proxy)的定义 教材里定义很简单: 所谓代理模式, 就是为其他对象提供一种代理控制对这个对象的访问. 上面出现了3个名词: 1.其他对象 2. ...

  2. 二十四种设计模式:代理模式(Proxy Pattern)

    代理模式(Proxy Pattern) 介绍 为其他对象提供一个代理以控制对这个对象的访问. 示例 有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这 ...

  3. Java24种设计模式(第二种)--代理模式(Proxy Pattern)

    Java24种设计模式 (第二种) 一.代理模式(Proxy Pattern) 模式逻辑: 什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道 被代理人能做哪些事 ...

  4. 二十三种设计模式(第十二种)-----代理模式(Proxy)

    二十三种设计模式(第十二种)-----代理模式(Proxy) 尚硅谷视频连接https://www.bilibili.com/video/BV1G4411c7N4?from=search&se ...

  5. [Java] 代理模式 Proxy Mode

    [Java] 代理模式 Proxy Mode 文章目录 [Java] 代理模式 Proxy Mode 1. 代理思想 2.java.lang.reflect.Proxy类 2.1 利用反射创建prox ...

  6. 设计模式——代理模式(Proxy Pattern)之为别人做嫁衣

    代理模式Proxy Pattern 代理模式 1.背景 2.定义 3.特征 4.应用场景 5.实验案例 参考 代理模式 1.背景 假如说我现在想租一间房子,虽然我可以自己去找房源,做卫生检测等一系列的 ...

  7. 设计模式-代理模式(Proxy Pattern)

    设计模式-代理模式(Proxy Pattern) 文章目录 设计模式-代理模式(Proxy Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.小结 六.动态代理 ...

  8. js设计模式——代理模式proxy

    什么是代理模式 代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问. (可以想象一下明星与经纪人的关系,明星是请求的本体,经纪人就是代理proxy) 如何实现代理模式 代理对象内部含有对本 ...

  9. 设计模式之代理模式(Proxy)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

最新文章

  1. Redis 笔记(06)— set 类型(向集合添加元素、获取集合元素个数、判断集合中是否包含某个元素、删除给定元素、返回集合中所有元素、计算集合的交集、并集、差集)
  2. centos7下没有iptables进行安装或更新
  3. DPI — Application Assurance — Overview
  4. python学生信息管理系统心得体会-python实现名片管理系统
  5. java图形界面设计 swing之JTable表格的创建使用-添加鼠标监听
  6. mac上安装MySQL
  7. [译] Ruby 2.6 String的split 方法支持代码块执行
  8. C++ #include iostream #include iostream.h #include string.h区别及作用
  9. Remote Desktop Manager for Mac(远程桌面管理)
  10. 10年Java老鸟忠告:技术人这4个错别再犯了!
  11. Linux下的uniq,head,tail,cut,paste
  12. 使用selenium自动化工具爬取微博内容和评论
  13. python发送验证码通知短信(互亿无线)
  14. Cardhop for Mac(通讯录管理工具)
  15. 从“制造”之城,到“智造”标杆,长沙何以站上发展新高地?
  16. 国内搜索引擎技术现状 zZ
  17. 如何学好高中数学 提高高中数学成绩秒杀技巧(这几点很重要)
  18. JavaScript执行顺序分析
  19. 前端React单点登录的实现
  20. 什么是Tick 数据?

热门文章

  1. R语言应用substr函数和substring函数抽取(extract)、删除(Remove)、替换、匹配(Match)特定的字符串、并对比两个函数的异同、grepl检查子字符串是否存在于字符串中
  2. python使用imbalanced-learn的SMOTE方法进行上采样处理数据不平衡问题
  3. numpy中ravel函数、flatten函数的功能及差异
  4. 测序数据质量统计软件fastqc,multiqc
  5. Grafana常用的监控
  6. 中文语境下的手机号识别
  7. 【转载】Python的运行原理(编译过程及执行原理)
  8. 在Linux系统下编译并执行C++程序
  9. TensorFlow基础2(张量)
  10. 在Markdown中用mermaid画流程图和ER图