0%
概念
构建了透明置于两个不同对象之内的一个对象,从而能够截取或代理这两个对象间的通信或访问。
应用场景
- 远程代理:也就是为了一个对象在不同地址空间提供局部代表。隐藏一个对象存在于不同地址空间的事实。
- 虚拟代理:根据需求来创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。
- 安全代理:用来控制真实对象的访问对象。
- 智能指引:当调用真实对象的时候,代理处理一些事情。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| <?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)、虚代理(例如:异步加载图片)、保护代理&智能指引(例如:权限保护),而我们代码实现的最普通的代理,其实就是让代理类来代替真实类的操作