php核心学习-设计模式的学习-委托模式

委托者模式

为其它对象提供一种代理以控制对这个对象的访问

简单的理解如下图所示:
这里写图片描述

下面我们导入一个场景来学习委托者模式:
电商网站上面现在卖有茶轴键盘,电扇网站会员和电扇网站普通会员买的折扣是不一样的,现在我们模拟不同用户购买键盘订单的价格。
首先,创建了以下的目录结构
这里写图片描述
其中user就是我们项目的委托者代理
实体:
keyboard.php

<?php
class keyboard
{
    //键盘价格
    public function getPrice() {
        return 1500;
    }
}

用户等级
普通用户noruser.php

<?php

/**
 * Class noruser
 * 普通用户类
 */
class noruser
{
    //普通会员折扣
    public function getDisCount() {
        return 0.95;
    }

}

网站会员用户vipuser.php

<?php
/**
 * 网站会员
 */
class vipuser
{
    //电商网站会员折扣
    public function getVipDisCount() {
        return 0.5;
    }
}

委托者代理
user.php

<?php
//用户代理类
class user
{

    public $delegator=null;//委托者对象
    function __call($name, $arguments)
    {
        // TODO: Implement __call() method.
        if ($this->delegator!=null) {
           return call_user_func_array([$this->delegator,$name],$arguments);
        }
        return false;
    }
}

模拟返回商品价格
order.php

<?php
/**
 * 模拟演示使用委托这模式返回商品价格
 */
require ("keyboard.php");
require ('user.php');
require ('noruser.php');
require ("vipuser.php");

$user=new user();
$keyboard=new keyboard();
$user->delegator=new vipuser();
$user->getVipDisCount();
echo "会员购买茶轴键盘的价格是:".$keyboard->getPrice()*$user->getVipDisCount();
echo "<br/>";
$user->delegator=new noruser();
echo "会员购买茶轴键盘的价格是:".$keyboard->getPrice()*$user->getDisCount();

效果如下:
这里写图片描述

优点:
1.职责清晰 真实的角色就是实现的业务逻辑,不用关心其他非本指责的事务
2.高扩展性 具体主题角色不能怎么变化,只要它实现了接口,代理类完全可以在不做任何修改的情况下使用
3.智能化 动态代理是最好的体现,即在运行阶段才指定实际代理对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值