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 相关文章推荐
在PHP3中实现SESSION的功能(二)
Oct 09 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
Apr 20 PHP
基于PHP编程注意事项的小结
Apr 27 PHP
浅析memcache启动以及telnet命令详解
Jun 28 PHP
PHP中上传多个文件的表单设计例子
Nov 19 PHP
php将金额数字转化为中文大写
Jul 09 PHP
PHP使用array_merge重新排列数组下标的方法
Jul 22 PHP
PHP实现统计在线人数功能示例
Oct 15 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
May 12 PHP
PHP实现微信商户支付企业付款到零钱功能
Sep 30 PHP
Laravel5.1框架注册中间件的三种场景详解
Jul 09 PHP
Laravel定时任务的每秒执行代码
Oct 22 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
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
jQuery中remove()方法用法实例
2014/12/25 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
jQuery的remove()方法使用详解
2015/08/11 Javascript
JavaScript:Date类型全面解析
2016/05/19 Javascript
layer弹出层中H5播放器全屏出错的解决方法
2017/02/21 Javascript
Angular2环境搭建具体操作步骤(推荐)
2017/08/04 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
jquery实现企业定位式导航效果
2018/01/01 jQuery
JS中offset和匀速动画详解
2018/02/06 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
Vue+Express实现登录状态权限验证的示例代码
2019/05/05 Javascript
node读写Excel操作实例分析
2019/11/06 Javascript
[02:25]DOTA2英雄基础教程 生死判决瘟疫法师
2013/12/06 DOTA
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
python中的hashlib和base64加密模块使用实例
2014/09/02 Python
使用Python生成XML的方法实例
2017/03/21 Python
Python动态生成多维数组的方法示例
2018/08/09 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
2019/04/09 Python
Python中format()格式输出全解
2019/04/12 Python
解决python 文本过滤和清理问题
2019/08/28 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
分享全球十款超强HTML5开发工具
2014/05/14 HTML / CSS
Canvas环形饼图与手势控制的实现代码
2019/11/08 HTML / CSS
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
物流管理专业应届生求职信
2013/11/21 职场文书
关于赌博的检讨书
2014/01/08 职场文书
公司面试感谢信
2014/02/01 职场文书
生日主持词
2014/03/20 职场文书
学习保证书范文
2014/04/30 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
JavaScript流程控制(分支)
2021/12/06 Javascript
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js
Docker安装MySql8并远程访问的实现
2022/07/07 Servers
python如何将mat文件转为png
2022/07/15 Python