PHP设计模式之代理模式

PHP设计模式之代理模式 代理模式定义

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

代理模式使用场景

当需要隐藏一个类的时候;

可以在代理类中做访问委托类的权限管理;

当我们需要对委托类功能做拓展的时候也可以使用代理模式。

代理模式的优缺点

优点:

职责清晰,委托类只需关注自身功能实现,不需要非自身职责;

代理对象可以在客户端和目标对象之间起到中介作用,保护目标对象;

可拓展性更强。

缺点:

代理类的增加,会使系统文件增加,增加复杂度;

增加一层代理类,性能会有所损耗;

代理模式代码实现

ByHouseInterface.php

<?php namespace App\Structural\Proxy; interface ByHouseInterface { public function byHouse(); }

TomByHouse.php

<?php namespace App\Structural\Proxy; class TomByHouse implements ByHouseInterface { public function byHouse() { echo "tom by a house \r\n"; } }

ByHousePorxy.php

<?php namespace App\Structural\Proxy; class ByHousePorxy implements ByHouseInterface { protected $customer; public function __construct(ByHouseInterface $customer) { $this->customer = $customer; } public function byHouse() { echo "by house before \r\n"; $this->customer->byHouse(); echo "by house after \r\n"; return 1; } }

测试类

<?php class ProxyTest extends \PHPUnit\Framework\TestCase { public function testByHouse() { $proxy = new \App\Structural\Proxy\ByHousePorxy(new \App\Structural\Proxy\TomByHouse()); $this->assertEquals(1, $proxy->byHouse()); } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyfdd.html