php与设计模式-代理模式

代理模式

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

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容