php核心学习-设计模式的学习-委托模式
来源:互联网 发布:网达软件股票 编辑:程序博客网 时间:2024/06/10 17:32
委托者模式
为其它对象提供一种代理以控制对这个对象的访问
简单的理解如下图所示:
下面我们导入一个场景来学习委托者模式:
电商网站上面现在卖有茶轴键盘,电扇网站会员和电扇网站普通会员买的折扣是不一样的,现在我们模拟不同用户购买键盘订单的价格。
首先,创建了以下的目录结构
其中user就是我们项目的委托者代理
实体:
keyboard.php
<?phpclass 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
- php核心学习-设计模式的学习-委托模式
- php核心学习-设计模式的学习-简单工厂模式
- php核心学习-设计模式的学习-注册树模式
- php核心学习-设计模式的学习-观察者模式
- php核心学习-设计模式的学习-责任链模式
- php设计模式学习
- [学习] 常见的 PHP 设计模式分析
- PHP中设计模式的学习笔记
- php魔术方法,设计模式的学习
- php 设计模式(学习笔记)
- PHP设计模式学习笔记
- 设计模式深入学习IOS版(6)委托模式
- 学习PHP设计模式之观察者模式
- PHP设计模式系列 - 委托模式
- PHP之设计模式—委托模式
- PHP设计模式系列 - 委托模式
- php设计模式系列--委托模式
- PHP设计模式系列 - 委托模式
- javaScript知识点之this
- centos 7 修改网卡名称
- bzoj 2002 弹飞绵羊 分块
- KMP算法-next数组的应用-循环节问题
- 创建ORACLE表空间及管理
- php核心学习-设计模式的学习-委托模式
- POJ 3669 Meteor Shower
- 关于php的知识
- POJ 3169 Layout (差分约束最短路)
- 数据库备份如何分类?
- days6
- Android线程管理(一)——线程通信
- 给结构体里定义的二维数组赋值
- Java集合-ArrayList源码分析