发布于2021-03-14 05:50 阅读(935) 评论(0) 点赞(18) 收藏(0)
为昂贵或者无法复制的资源提供接口。
代理模式(Proxy)为其他对象提供一种代理以控制对这个对象的访问。使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象、创建开销大的对象或需要安全控制的对象),并且可以在不改变目标对象的情况下添加一些额外的功能。
在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象去掉客户不能看到的内容和服务或者添加客户需要的额外服务。
经典例子就是网络代理,你想访问 Facebook 或者 Twitter ,如何绕过 GFW?找个代理网站。
<?php
namespace DesignPatterns\Structural\Proxy;
/**
* @property 用户名
*/
class Record
{
/**
* @var string[]
*/
private $data;
/**
* @param string[] $data
*/
public function __construct(array $data = [])
{
$this->data = $data;
}
/**
* @param string $name
* @param string $value
*/
public function __set(string $name, string $value)
{
$this->data[$name] = $value;
}
public function __get(string $name): string
{
if (!isset($this->data[$name])) {
throw new \OutOfRangeException('Invalid name given');
}
return $this->data[$name];
}
}
<?php
namespace DesignPatterns\Structural\Proxy;
class RecordProxy extends Record
{
/**
* @var bool
*/
private $isDirty = false;
/**
* @var bool
*/
private $isInitialized = false;
/**
* @param array $data
*/
public function __construct(array $data)
{
parent::__construct($data);
// 当记录有数据的时候,将 initialized 标记为 true ,
// 因为记录将保存我们的业务逻辑,我们不希望在 Record 类里面实现这个行为
// 而是在继承了 Record 的代理类中去实现。
if (count($data) > 0) {
$this->isInitialized = true;
$this->isDirty = true;
}
}
/**
* @param string $name
* @param string $value
*/
public function __set(string $name, string $value)
{
$this->isDirty = true;
parent::__set($name, $value);
}
public function isDirty(): bool
{
return $this->isDirty;
}
}
<?php
namespace DesignPatterns\Structural\Proxy\Tests;
use DesignPatterns\Structural\Proxy\Record;
use DesignPatterns\Structural\Proxy\RecordProxy;
class ProxyTest extends \PHPUnit_Framework_TestCase
{
public function testSetAttribute(){
$data = [];
$proxy = new RecordProxy($data);
$proxy->xyz = false;
$this->assertTrue($proxy->xyz===false);
}
}
PHP 互联网架构师 50K 成长指南+行业问题解决总纲(持续更新)
面试10家公司,收获9个offer,2020年PHP 面试问题
★如果喜欢我的文章,想与更多资深开发者一起交流学习的话,获取更多大厂面试相关技术咨询和指导,欢迎加入我们的群啊,暗号:phpzh(君羊号码856460874)。
内容不错的话希望大家支持鼓励下点个赞/喜欢,欢迎一起来交流;另外如果有什么问题 建议 想看的内容可以在评论提出
作者:下班了快跑
链接:http://www.phpheidong.com/blog/article/3116/8ce1acf61f544a64c8a6/
来源:php黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 php黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-4
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!