1.架构定义代理为其他对象提供代理,以控制对此对象的访问。使用代理模式创建代理对象,可以控制对目标对象的访问(目标对象可以是远程对象、创建成本高的对象或需要安全控制的对象),可以在不改变目标对象的情况下增加一些附加功能。
在某些情况下,客户端不想或不能直接引用另一个对象,但代理对象可以充当客户端和目标对象之间的中介,可以通过代理对象删除客户端看不到的内容和服务或添加客户端需要的附加服务。
典型的例子是网络代理。如果你想访问脸书或推特,你如何能绕过?找个代理网站。
2、UML类图
3、示例代码
Record.php
& lt?phpnamespace design patterns \ Structural \ Proxy;/* * * Record class */class Record {/* * @ var array | null */protected $ data;/* * * * @ param null $ data */public function _ _ construct($ data = null){ $ this-& gt;data =(array)$ data;}/* * * magic setter * * @ param string $ name * @ param mixed $ value * * @ return void */public function _ _ set($ name,$ value){ $ this-& gt;data[(string)$ name]= $ value;}/* * * magic getter * * @ param string $ name * * @ return mixed | null */public function _ _ get($ name){ if(array _ key _ exists($ name,$ this-& gt;data)){ return $ this-& gt;data[(string)$ name];} else {返回null} }}RecordProxy.php
& lt?phpnamespace design patterns \ Structural \ Proxy;/* * * record proxy class */classrecordproxy扩展记录{/* * @ var bool */protected $ is dirty = false;/* * * * @ var bool */protected $ is initialized = false;/* * * * @ param array $ data */public function _ _ construct($ data){ parent::_ _ construct($ data);//当记录有数据时,将其标记为已初始化//由于记录将保存我们的业务逻辑,我们不想//在那里实现这种行为,而是在一个新的代理类中//扩展记录类if (null!= = $ data){ $ this-& gt;isInitialized = true$ this-& gt;isDirty = true} }/* * * magic setter * * @ param string $ name * @ param mixed $ value * * @ return void */public function _ _ set($ name,$ value){ $ this-& gt;isDirty = true父级::__set($name,$ value);}}4.测试代码ProxyTest.php
& lt?phpnamespace design patterns \ Structural \ Proxy \ Tests;使用design patterns \ Structural \ Proxy \ Record;使用design patterns \ Structural \ Proxy \ record Proxy;class proxy test extends \ PHPUnit _ Framework _ test case { public function testset attribute(){ $ data =[];$ proxy = new record proxy($ data);$ proxy->;xyz =假;$ this-& gt;assert true($ proxy-& gt;XYZ = = = false);}}5.总结一下代理模式在很多情况下非常有用,尤其是当你想强制控制一个对象的时候,比如延迟加载、监控状态变化等等。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。