首页 > 代码库 > 代理模式
代理模式
代理模式:
为对象提供一个代理以控制其它对象对它的访问。
代理可以透明地做任何事情:懒散创建RealSubject或载入数据,与其它机器交换消息,写时复制策略等。这与HTTP代理有点类似,其客户端(如浏览器)和应用程序依赖于与HTTP服务器的联系,代理在管理连接时可以完成其它任务,如访问控制和缓存大型下载文件。
思维导图:
代码:
<?php/** * Proxy design pattern (lazy loading) * 实现了图片的延迟加载 */ /** * 图片接口 */interface ImageInterface{ public function display();} /** * realclass *实例化时从磁盘加载图片 */class Image implements ImageInterface{ protected $filename; public function __construct($filename) { $this->filename = $filename; $this->loadFromDisk(); } protected function loadFromDisk() { echo "Loading {$this->filename}\n"; } public function display() { echo "Display {$this->filename}\n"; }} /** * proxyclass *实例化时从磁盘加载图片 *实现了延迟加载,Image是实例化时就执行了loadFromDisk, */class ProxyImage implements ImageInterface{ protected $id; protected $image; protected $filename; public function __construct($filename) { $this->filename = $filename; } public function display() { if (null === $this->image) { //缓存 $this->image = new Image($this->filename); } return $this->image->display(); }}// Usage example//image类是实例化时就把图片从磁盘载入内存$filename = ‘test.png‘;$image1 = new Image($filename); // loading necessaryecho $image1->display(); // loading unnecessary //代理类是在display时才把图片从磁盘加入内存$image2 = new ProxyImage($filename); // loading unnecessaryecho $image2->display(); // loading necessaryecho $image2->display(); // loading unnecessary,图片类在第一次被缓存
总结:
简单来讲,代理模式就是为其他对象提供一个代理以控制对这个对象的访问。
代理模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。