码迷,mamicode.com
首页 > 其他好文 > 详细

代理模式

时间:2014-12-17 20:19:31      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   ar   io   os   sp   strong   

代理模式

为对象提供一个代理以控制其它对象对它的访问。

代理可以透明地做任何事情:懒散创建RealSubject或载入数据,与其它机器交换消息,写时复制策略等。这与HTTP代理有点类似,其客户端(如浏览器)和应用程序依赖于与HTTP服务器的联系,代理在管理连接时可以完成其它任务,如访问控制和缓存大型下载文件。

 

思维导图:

bubuko.com,布布扣

 

代码:

 

<?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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!