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中利用XML技术构造远程服务(下)
Oct 09 PHP
PHP4(windows版本)中的COM函数
Oct 09 PHP
php 在线打包_支持子目录
Jun 28 PHP
PHP DataGrid 实现代码
Aug 12 PHP
php截取字符串并保留完整xml标签的函数代码
Feb 06 PHP
php网站判断用户是否是手机访问的方法
Nov 01 PHP
php将mysql数据库整库导出生成sql文件的具体实现
Jan 08 PHP
详解PHP+AJAX无刷新分页实现方法
Nov 03 PHP
PHP自带方法验证邮箱是否存在
Feb 01 PHP
PHP中的print_r 与 var_dump 输出数组
Jun 13 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 PHP
PHP7变量处理机制修改
Mar 09 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
Yii中表单用法实例详解
2016/01/05 PHP
基于jQuery的图片剪切插件
2011/08/03 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
js实现文字跟随鼠标移动而移动的方法
2015/02/28 Javascript
javascript实现checkbox全选的代码
2015/04/30 Javascript
jquery实现从数组移除指定的值
2015/06/24 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
2016/09/17 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
jQuery实现文字自动横移
2017/01/08 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
2017/06/08 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
[02:46]解说DC:感谢430陪伴我们的DOTA2国际邀请赛岁月
2016/06/29 DOTA
[01:34]传奇从这开始 2016国际邀请赛中国区预选赛震撼开启
2016/06/26 DOTA
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
使用Python实现微信提醒备忘录功能
2018/12/04 Python
在Python中关于使用os模块遍历目录的实现方法
2019/01/03 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
python使用pygame模块实现坦克大战游戏
2020/03/25 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
python matplotlib库的基本使用
2020/09/23 Python
Python pymysql模块安装并操作过程解析
2020/10/13 Python
.NET面试题:什么是反射
2016/09/30 面试题
个人自我剖析材料
2014/02/07 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
个人授权委托书范文
2014/09/21 职场文书
反对四风自我剖析材料
2014/10/07 职场文书
搞笑婚庆主持词
2015/06/29 职场文书
2015年店长个人工作总结
2015/10/23 职场文书
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers