-
概念
构建了透明置于两个不同对象之内的一个对象,从而能够截取或代理这两个对象间的通信或访问。
-
应用场景
- 远程代理:也就是为了一个对象在不同地址空间提供局部代表。隐藏一个对象存在于不同地址空间的事实。
- 虚拟代理:根据需求来创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。
- 安全代理:用来控制真实对象的访问对象。
- 智能指引:当调用真实对象的时候,代理处理一些事情。
<?php
//真实类
interface Subject
{
public function request();
}
class RealSubject implements Subject
{
public function request()
{
echo '真实的操作';
}
}
//代理模式代理真实类
class Proxy implements Subject
{
protected $realSubject;
public function __construct()
{
$this->realSubject = new RealSubject();
}
public function request()
{
echo '代理操作';
$this->realSubject->request();
}
}
//客户端
$proxy = new Proxy();
$proxy->request();
- 注意事项
- 代理模式的实现其实非常简单,或许你在不经意间经常会用到
- 请注意代理模式与装饰器、适配器的区别
- 装饰器:一般是对对象进行装饰,其中的方法行为会有增加,以修饰对象为主
- 适配器:一般会改变方法行为,目的是保持接口的统一但得到不同的实现
- 代理模式有几种形式:远程代理(例如:第三方接口SDK)、虚代理(例如:异步加载图片)、保护代理&智能指引(例如:权限保护),而我们代码实现的最普通的代理,其实就是让代理类来代替真实类的操作