ouguangqiang

PHP设计模式之代理模式

代理模式定义

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

代理模式使用场景

  • 当需要隐藏一个类的时候;
  • 可以在代理类中做访问委托类的权限管理;
  • 当我们需要对委托类功能做拓展的时候也可以使用代理模式。

代理模式的优缺点

优点:

  1. 职责清晰,委托类只需关注自身功能实现,不需要非自身职责;
  2. 代理对象可以在客户端和目标对象之间起到中介作用,保护目标对象;
  3. 可拓展性更强。

缺点:

  1. 代理类的增加,会使系统文件增加,增加复杂度;
  2. 增加一层代理类,性能会有所损耗;

代理模式代码实现

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());
    }
}

相关文章: