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 相关文章推荐
给多个地址发邮件的类
Oct 09 PHP
php中神奇的fastcgi_finish_request
May 02 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
Jun 06 PHP
php中inlcude()性能对比详解
Sep 16 PHP
php旋转图片90度的方法
Nov 07 PHP
yii中widget的用法
Dec 03 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
Dec 02 PHP
DWZ+ThinkPHP开发时遇到的问题分析
Dec 12 PHP
PHP插件PHPMailer发送邮件功能
Feb 28 PHP
PHP通过文件保存和更新信息的方法分析
Sep 12 PHP
laravel 5.3 单用户登录简单实现方法
Oct 14 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
Dec 13 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
PHP 编程安全性小结
2010/01/08 PHP
服务器变量 $_SERVER 的深入解析
2013/07/02 PHP
ThinkPHP之用户注册登录留言完整实例
2014/07/22 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
PHP实现15位身份证号转18位的方法分析
2019/10/16 PHP
js获取上传文件大小示例代码
2014/04/10 Javascript
JS+DIV+CSS实现的经典标签切换效果代码
2015/09/14 Javascript
JavaScript实现的MD5算法完整实例
2016/02/02 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
详解node nvm进行node多版本管理
2017/10/21 Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
2017/10/30 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
微信小程序开发常见问题及解决方案
2019/07/11 Javascript
如何利用nodejs自动定时发送邮件提醒(超实用)
2020/12/01 NodeJs
js简单粗暴的发布订阅示例代码
2021/01/23 Javascript
Python获取一个用户名的组ID过程解析
2019/09/03 Python
Python接口开发实现步骤详解
2020/04/26 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
CSS3中颜色线性渐变实战
2015/07/18 HTML / CSS
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
优秀员工个人的自我评价
2013/11/29 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
听证会主持词
2015/07/03 职场文书
毕业欢送会致辞
2015/07/29 职场文书
2016春季幼儿园大班开学寄语
2015/12/03 职场文书
MySQL安装后默认自带数据库的作用详解
2021/04/27 MySQL
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python
基于Redis延迟队列的实现代码
2021/05/13 Redis
深入理解redis中multi与pipeline
2021/06/02 Redis
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript
php png失真的原因及解决办法
2021/11/17 PHP
MySQL 数据库范式化设计理论
2022/04/22 MySQL
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android