PHP设计模式之委托模式定义与用法简单示例


Posted in PHP onAugust 13, 2018

本文实例讲述了PHP设计模式之委托模式定义与用法。分享给大家供大家参考,具体如下:

委托模式:

通过分配或委托至其他对象,委托设计模式能够去除核心对象中的判决和复杂的功能性。

class Bank{
  protected $info;
  /*
  设置基本信息
  @param string $type 类型。例如"RMB"
  @param int $money 利率。例如"0.4%"
  */
  public function updateBrankInfo($type,$money){
    $this->info[$type]=$money;
  }
  /*
  相关操作(包括存款、取款操作)
  @param int $branktype 操作类型
  */
  public function brankWithdraw($branktype){
    $obj=new $branktype;
    return $obj->brankMain($this->info);
  }
}
/*
委托接口
*/
interface Delegate{
  /*
  操作方法:
  实现该接口必须实现的方法
  */
  public function brankMain($info);
}
/*
存款操作类
*/
class brankDeposit implements Delegate{
  /*
  存款操作
  */
  public function brankMain($info){
    echo $info['deposit'];
  }
} 
/*
取款操作类
*/
class brankWithdraw implements Delegate{
  /*
  取款操作
  */
  public function brankMain($info){
    echo $info['withdraw'];
  }
}
/*
客户端测试代码:
*/
$bank=new Bank();
$bank->updateBrankInfo("deposit","4000");
$bank->updateBrankInfo("withdraw","2000");
$bank->brankWithdraw("brankDeposit");
echo "<br>";
$bank->brankWithdraw("brankWithdraw");

运行结果:

4000
2000

传统方式:

在传统方式下,我们需要判断当前操作是取款操作还是存款操作,在分别调用Bank类中的取款操作和存款操作。

委托模式:

在委托模式下,我们将不需要客户端的判断操作,对客户端来说,需要什么操作,直接传入操作类型即可,Bank类可自动判断操作类型,返回相应操作的操作结果。当我们的操作类型非常多的时候,在客户端用if else判断无疑是很可怕的,再假如我们在很多地方都要有这块判断代码,我们需要对这些地方的判断代码都进行修改(加入后来添加的判断),而采用委托模式,我们仅仅需要在新添加的地方添加相应需要的类型即可,不需要改动其它地方的客户端代码(很大程度上提高了代码的复用性)。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP_Flame(Version:Progress)的原代码
Oct 09 PHP
php图片验证码代码
Mar 27 PHP
PHP 递归效率分析
Nov 24 PHP
Yii框架关联查询with用法分析
Dec 02 PHP
php连接oracle数据库及查询数据的方法
Dec 29 PHP
php截取中文字符串函数实例
Feb 23 PHP
php制作文本式留言板
Mar 18 PHP
php生成gif动画的方法
Nov 05 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
Jan 08 PHP
Yii CFileCache 获取不到值的原因分析
Feb 08 PHP
解决出现SoapFault (looks like we got no XML document)的问题
Jun 24 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 PHP
PHP设计模式之建造者模式定义与用法简单示例
Aug 13 #PHP
PHP设计模式之装饰器模式定义与用法简单示例
Aug 13 #PHP
PHP实现的ID混淆算法类与用法示例
Aug 10 #PHP
PHP+ajax实现二级联动菜单功能示例
Aug 10 #PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
Aug 10 #PHP
PHP实现的服务器一致性hash分布算法示例
Aug 09 #PHP
PHP检查端口是否可以被绑定的方法示例
Aug 09 #PHP
You might like
jQuery 源码分析笔记
2011/05/25 PHP
php数组转换js数组操作及json_encode的用法详解
2013/10/26 PHP
PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
2014/10/20 PHP
PHP实现生成数据字典功能示例
2018/05/24 PHP
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
2007/04/20 Javascript
限制文本框输入N个字符的js代码
2010/05/13 Javascript
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
js调用图片隐藏&amp;显示实现代码
2013/09/13 Javascript
Javascript函数式编程简单介绍
2015/10/11 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
星期几的不同脚本写法(推荐)
2016/06/01 Javascript
基于BootstrapValidator的Form表单验证(24)
2016/12/12 Javascript
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
JS设计模式之策略模式概念与用法分析
2018/02/05 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
2019/08/28 Javascript
详解vue修改elementUI的分页组件视图没更新问题
2020/11/13 Javascript
举例讲解Python中的算数运算符的用法
2015/05/13 Python
Python用Bottle轻量级框架进行Web开发
2016/06/08 Python
Python生成随机数组的方法小结
2017/04/15 Python
django上传图片并生成缩略图方法示例
2017/12/11 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
python/sympy求解矩阵方程的方法
2018/11/08 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
详解python statistics模块及函数用法
2019/10/27 Python
PYQT5 vscode联合操作qtdesigner的方法
2020/03/24 Python
Chemist Warehouse官方海外旗舰店:澳洲第一连锁大药房
2017/08/25 全球购物
windeln官方海外旗舰店:德淘超人气母婴超市
2017/12/15 全球购物
会计与审计毕业生自荐信范文
2013/12/30 职场文书
最新优秀教师个人先进事迹材料
2014/05/06 职场文书
党日活动总结
2014/05/07 职场文书
2014年幼儿园园长工作总结
2014/12/17 职场文书
上课迟到检讨书
2015/05/06 职场文书
如何获取numpy array前N个最大值
2021/05/14 Python
SQL实现LeetCode(180.连续的数字)
2021/08/04 MySQL