设计模式-- 代理模式

代理模式其实生活中非常常见;在某些情况下,一个对象不合适或者不能直接调用另外一个对象,而代理对象可以在客户端和目标对象中起到中间人作用。

场景一:程序员A喜欢一个女生不敢表白;就请了B带话给了女生,这会好了程序员A成功抱的美人归。中间者可能会得到一下好处比如被请吃饭了。(现实没这么好的😄)

场景二:房产中介。一样的他们中间商赚差价,其实就是好处,代理模式经过了中间人代理,在系统代码级别上可以理解为性能消耗。

优点:职责清晰,委托类只需关注自身功能实现即可(比如给钱即可);可拓展性强,代理对象介于客户和目标中间起到了保护目标对象作用(比如拍卖一件古董,在代理那里会有各种验资等保护措施)

缺点:会使文件变多,性能损耗。

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

代理类可以在实现目的的前后加上想要的操作:比如做日志等

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值