代理模式我们可能不熟悉;
但是代理我们大多数程序猿都应该用过;
比如说为了翻过一堵墙用谷歌查找资料;
或者现实中购买商品我们也不是直接去工厂;
而是通过一层层的代理商;
Subject:主题接口;定义真实主题和代理的公共方法;
RealSubject:实现主题接口的真实主题;隐藏在代理之后;
Proxy:实现主题接口并在内部引用了真实的主题;
Subject.php
<?php
namespace Baijunyao\DesignPatterns\Proxy;
/**
*
*
* Interface Subject
*
* @package Baijunyao\DesignPatterns\Proxy
*/
interface Subject
{
public function action();
}
RealSubject.php
<?php
namespace Baijunyao\DesignPatterns\Proxy;
/**
* 真实主题
*
* Class RealSubject
*
* @package Baijunyao\DesignPatterns\Proxy
*/
class RealSubject implements Subject
{
/**
* 执行操作
*/
public function action()
{
echo '执行操作';
}
}
Proxy.php
<?php
namespace Baijunyao\DesignPatterns\Proxy;
/**
* 代理
*
* Class Proxy
*
* @package Baijunyao\DesignPatterns\Proxy
*/
class Proxy implements Subject
{
/**
* 真实主题
*
* @var \Baijunyao\DesignPatterns\Proxy\RealSubject
*/
protected $realSubject;
/**
* Proxy constructor.
*/
public function __construct()
{
$this->realSubject = new RealSubject();
}
/*
* 执行操作
*/
public function action()
{
$this->realSubject->action();
}
}
运行;
index.php
<?php
namespace Baijunyao\DesignPatterns\Proxy;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\Proxy
*/
class Client
{
/**
* 运行
*/
public function run()
{
$proxy = new Proxy();
$proxy->action();
}
}
$client = new Client();
$client->run();
因为我们在客户端和真实的主题间加了一层代理;
那么我们就可以做很多事情了;
比如说可以在不修改真实代理的情况下做一些权限控制;
github示例:https://github.com/baijunyao/design-patterns/tree/master/Proxy
本文为白俊遥原创文章,转载无需和我联系,但请注明来自白俊遥博客https://baijunyao.com 欢迎捐赠赞赏加入组织创建QQ群及捐赠渠道
最新评论