首页 > 代码库 > 代理模式

代理模式

代理模式

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

代理可以透明地做任何事情:懒散创建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,图片类在第一次被缓存

 

 

 

总结:

简单来讲,代理模式就是为其他对象提供一个代理以控制对这个对象的访问。

 

代理模式