标签: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