编程中的设计模式之代理模式
2020-09-01 本文已影响0人
phpworkerman
简介
代理模式(Proxy Pattern)是一个类代表另外一个类的功能,属于结构型模式。客户端不直接访问真实的对象,而是通过一个代理对象间接的访问。
代码实例
现在有一个图片类,客户端通过代理模式访问,首次加载会访问真实的对象,再次访问将通过代理储存的对象调用图片类。
<?php
interface Image
{
public function load();
}
class RealImage implements Image
{
public $filename;
public function __construct($filename)
{
$this->filename = $filename;
$this->read();
}
public function read()
{
echo '读取真实图片' . $this->filename . '<br>';
}
public function load()
{
echo '载入图片' . $this->filename . '<br>';
}
}
class ProxyImage implements Image
{
public $filename;
public $image = null;
public function __construct($filename)
{
$this->filename = $filename;
}
public function load()
{
if($this->image === null){
$this->image = new RealImage($this->filename);
}
$this->image->load();
}
}
class ProxyDemo
{
public function output()
{
$filename = 'person.jpg';
$proxyImage = new ProxyImage($filename);
//载入真实图片
$proxyImage->load();
//载入代理图片
$proxyImage->load();
}
}
$proxyDemo = new ProxyDemo();
$proxyDemo->output();
总结
代理模式实现了客户端和真实类之间的中间层,通过中间层可以实现对真实类的访问控制和功能扩展。