PHP设计模式之代理模式

以下文字部分均为本人自己的想法与总结所以未必正确;

代码摘自https://blog.csdn.net/rust94/article/details/88895465

 代理模式:

    概念: 代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。

 适用场景:

  • 中介隔离作用:在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。
  • 开闭原则,增加功能:代理类除了是客户类和委托类的中介之外,我们还可以通过给代理类增加额外的功能来扩展委托类的功能,这样做我们只需要修改代理类而不需要再修改委托类,符合代码设计的开闭原则。代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后对返回结果的处理等。代理类本身并不真正实现服务,而是同过调用委托类的相关方法,来提供特定的服务。真正的业务功能还是由委托类来实现,但是可以在业务功能执行的前后加入一些公共的服务。例如我们想给项目加入缓存、日志这些功能,我们就可以使用代理类来完成,而没必要打开已经封装好的委托类。

  个人理解:

          代理其实就是中间人。类比现实生活中的租房中介,具体的房子信息不用客户去收集,只要跟中介要就行了。当然,中介还可以在给你信息前对房屋信息进行一些包装美化(也就是在代理类中增加一些功能)

 

class SchoolGirl
{
    private $name;

    function __construct($name)
    {
        $this->name = $name;
    }

    public function getName()
    {
        return $this->name;
    }
}

// 代理接口
interface GiveGift
{
    public function GiveDolls();
    public function GiveFlowers();
    public function GiveChocolate();
}

// 代理实现送礼物接口
class Proxy implements GiveGift
{
    protected $pursuit;

    function __construct(SchoolGirl $girl)
    {
        $this->pursuit = new Pursuit($girl);
    }

    public function GiveDolls()
    {
        echo "追求者XXX委托我给你送娃娃:" . PHP_EOL;
        $this->pursuit->GiveDolls();
    }

    public function GiveFlowers()
    {
        echo "追求者XXX委托我给你送鲜花:" . PHP_EOL;
        $this->pursuit->GiveFlowers();
    }

    public function GiveChocolate()
    {
        echo "追求者XXX委托我给你送巧克力:" . PHP_EOL;
        $this->pursuit->GiveChocolate();
    }
}

// 追求者类实现送礼物接口
class Pursuit implements GiveGift
{
    protected $girl;
    function __construct(SchoolGirl $girl)
    {
        $this->girl = $girl;
    }

    public function GiveDolls()
    {
        echo $this->girl->getName()." 送你娃娃\n";
    }

    public function GiveFlowers()
    {
        echo $this->girl->getName()." 送你花\n";
    }

    public function GiveChocolate()
    {
        echo $this->girl->getName()." 送你巧克力\n";
    }
}

// 客户端代码
$girl = new SchoolGirl('李梅');
$proxy = new Proxy($girl);
$proxy->GiveDolls();
$proxy->GiveChocolate();
$proxy->GiveFlowers();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值