为其他对象提供一种代理以控制对这个对象的访问,通俗来讲就是中介,你只知道中介,不清楚真正的来源事谁,
在代理类里还可以增加一下操作,代理类本身不实现服务,只是调用委托类对象
正向代理反向代理,正向事你知道的,反向是你不知道的
不用修改已经封装好的未退类,起一个隔离作用
interface SendMessage
{
public function Send();
}
class RealSendMessage implements SendMessage
{
public function Send()
{
echo '短信发送中...', PHP_EOL;
}
}
class ProxySendMessage implements SendMessage
{
private $realSendMessage;
public function __construct($realSendMessage)
{
$this->realSendMessage = $realSendMessage;
}
public function Send()
{
echo '短信开始发送', PHP_EOL;
$this->realSendMessage->Send();
echo '短信结束发送', PHP_EOL;
}
}
$sendMessage = new ProxySendMessage(new RealSendMessage());
$sendMessage->Send();
注意代理跟适配器,装饰器的关系
装饰器:会对方法进行增加,修饰,会将原始类作为参数传入,不确定是哪个
适配器:改变方法行为,保持接口统一性,但得到不同的实现
代理:重点在于控制访问,可以直接定义号代理那个类