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的历史和优缺点
Oct 09 PHP
用ODBC的分页显示
Oct 09 PHP
分页详解 从此分页无忧(PHP+mysql)
Nov 23 PHP
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
Sep 10 PHP
PHP中获取时间的下一周下个月的方法
Mar 18 PHP
在Yii框架中使用PHP模板引擎Twig的例子
Jun 13 PHP
CentOS6.5 编译安装lnmp环境
Dec 21 PHP
如何离线执行php任务
Feb 21 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 PHP
Laravel 简单实现Ajax滚动加载示例
Oct 22 PHP
Laravel中如何轻松容易的输出完整的SQL语句
Jul 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
PHP 和 XML: 使用expat函数(一)
2006/10/09 PHP
php顺序查找和二分查找示例
2014/03/27 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
2016/11/17 PHP
PHP下载远程图片的几种方法总结
2017/04/07 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
jQuery Tools tab(幻灯片)
2012/07/14 Javascript
JavaScript异步编程Promise模式的6个特性
2014/04/03 Javascript
javascript中的throttle和debounce浅析
2014/06/06 Javascript
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
javascript实现倒计时并弹窗提示特效
2015/06/05 Javascript
Vue.js学习笔记之 helloworld
2016/08/14 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
JS时间控制实现动态效果的实例讲解
2017/07/31 Javascript
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
node.js将MongoDB数据同步到MySQL的步骤
2017/12/10 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
2018/06/25 Javascript
NodeJS实现自定义流的方法
2018/08/01 NodeJs
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
JavaScript数组排序功能简单实现
2020/05/14 Javascript
JavaScript 闭包的使用场景
2020/09/17 Javascript
在GitHub Pages上使用Pelican搭建博客的教程
2015/04/25 Python
Python读取本地文件并解析网页元素的方法
2018/05/21 Python
python 使用值来排序一个字典的方法
2018/11/16 Python
HTML5 文件域+FileReader 分段读取文件并上传到服务器
2017/10/23 HTML / CSS
物业管理计划书
2014/01/10 职场文书
村长党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
初中军训感言
2015/08/01 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书
Mysql案例刨析事务隔离级别
2021/09/25 MySQL
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang