文章摘要
本文介绍了PHP中的代理模式,通过定义一个`Subject`接口和实现该接口的`RealSubject`类,以及一个继承自`Subject`的`Proxy`类。`Proxy`类通过继承实现了对`RealSubject`的请求处理,并在`request`方法中添加了权限检查和日志记录功能。代码展示了如何通过继承和方法重写,实现对真实服务的间接访问,同时保持了代码的可维护性和扩展性。
<?php
// 主题接口
interface Subject
{
public function request();
}
// 真实主题类
class RealSubject implements Subject
{
public function request()
{
echo “RealSubject handles request.\n”;
}
}
// 代理类
class Proxy implements Subject
{
private $realSubject;
public function __construct(RealSubject $realSubject)
{
$this->realSubject=$realSubject;
}
public function request()
{
if ($this->checkAccess()) {
$this->realSubject->request();
$this->logAccess();
}
}
private function checkAccess()
{
echo “Proxy checks access.\n”;
return true;
}
private function logAccess()
{
echo “Proxy logs access.\n”;
}
}
// 客户端代码
$realSubject=new RealSubject();
$proxy=new Proxy($realSubject);
$proxy->request();
// 主题接口
interface Subject
{
public function request();
}
// 真实主题类
class RealSubject implements Subject
{
public function request()
{
echo “RealSubject handles request.\n”;
}
}
// 代理类
class Proxy implements Subject
{
private $realSubject;
public function __construct(RealSubject $realSubject)
{
$this->realSubject=$realSubject;
}
public function request()
{
if ($this->checkAccess()) {
$this->realSubject->request();
$this->logAccess();
}
}
private function checkAccess()
{
echo “Proxy checks access.\n”;
return true;
}
private function logAccess()
{
echo “Proxy logs access.\n”;
}
}
// 客户端代码
$realSubject=new RealSubject();
$proxy=new Proxy($realSubject);
$proxy->request();
© 版权声明
文章版权归作者所有,未经允许请勿转载。



