代理模式(Proxy)

大概意思

这个模式其实比较简单,就是你想访问一个类的时候,不直接访问,而是找这个类的一个代理。
代理就是中介,有中介就意味着解耦。

在代理模式下,代理对象和被代理的对象,有个重要特点:必须继承同一个接口。

这里说下重点,之前说过的 适配器模式,和代理模式非常非常像,只不过是在适配器模式下,适配器和它要适配的类没有继承同一接口,适配器就是要把这个第三方类变成符合接口规范。适配器也是个中介,所以我说它们很像。

实现

接口:

/**
* Interface Image
* 接口
*/
interface Image {
public function getWidth();
}

真实对象:

/**
* Class RawImage
* 真实对象
*/
class RawImage implements Image{
public function getWidth(){
return "100x100";
}
}

中介对象(代理):

/**
* @代理对象
*/
class ImageProxy implements Image{
private $img;
public function __construct(){
$this->img = new RawImage();
}
public function getWidth(){
return $this->img->getWidth();
}
}

使用:

$proxy = new ImageProxy();
print_r($proxy->getWidth());

这是我能想到最简单的例子了。

作用

显而易见,解耦。因为代理和被代理对象 都实现同一接口,所以对于原真实对象,你无论怎么改都行。

同样,在代理对象中,除了如实反映真实对象的方法逻辑,你还可以添加点别的逻辑,怎么添加都行,

不会影响到真实对象,添加后可以在所有使用过代理对象的业务逻辑中瞬间更新。

tags: PHP,设计模式