标签:des style blog http ar io os sp strong
代理模式:
为对象提供一个代理以控制其它对象对它的访问。
代理可以透明地做任何事情:懒散创建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 necessary echo $image1->display(); // loading unnecessary //代理类是在display时才把图片从磁盘加入内存 $image2 = new ProxyImage($filename); // loading unnecessary echo $image2->display(); // loading necessary echo $image2->display(); // loading unnecessary,图片类在第一次被缓存
总结:
简单来讲,代理模式就是为其他对象提供一个代理以控制对这个对象的访问。
标签:des style blog http ar io os sp strong
原文地址:http://www.cnblogs.com/leezhxing/p/4170084.html