php与设计模式-代理模式

本文深入探讨了代理模式的设计原理及其实现方式,通过一个具体的PHP示例,展示了如何使用代理模式来控制对对象的访问,以及如何在客户端和目标对象之间建立中介作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代理模式

为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

Demo

/**
 * Interface Subject 抽象主题角色
 *
 * 定义RealSubject和Proxy共同具备的东西
 */
interface Subject
{
    public function say();
    public function run();
}
 
/**
 * Class RealSubject 真正主题角色
 */
class RealSubject implements Subject
{
    // 姓名
    private $_name;
 
    /**
     * RealSubject constructor. 构造方法
     *
     * @param $name
     */
    public function __construct($name)
    {
        $this->_name = $name;
    }
 
    /**
     * 说话
     */
    public function say()
    {
        echo $this->_name."在说话<br>";
    }
 
    /**
     * 在跑步
     */
    public function run(){
        echo $this->_name."在跑步<br>";
    }
}
 
/**
 * Class Proxy 代理对象
 */
class Proxy implements Subject
{
    // 真实主题对象
    private $_realSubject = null;
 
    /**
     * Proxy constructor. 构造方法,依赖注入方式储存真实对象
     *
     * @param RealSubject|null $realSubject
     */
    public function __construct(RealSubject $realSubject = null)
    {
        if (empty($realSubject)) {
            $this->_realSubject = new RealSubject();
        } else {
            $this->_realSubject = $realSubject;
        }
    }
 
    /**
     * 调用说话方法
     */
    public function say()
    {
        $this->_realSubject->say();
    }
 
    /**
     * 调用跑步方法
     */
    public function run()
    {
        $this->_realSubject->run();
    }
}
 
/**
 * Class Client 本地测试
 */
class Client
{
    public static function test()
    {
        // 创建
        $subject = new RealSubject("张三");
        // 代理
        $proxy = new Proxy($subject);
        // 张三在说话
        $proxy->say();
        // 张三在跑步
        $proxy->run();
    }
}
 
// 测试
Client::test();

请关注我的订阅号

订阅号.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值