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模拟HTTP认证
Oct 09 PHP
对Session和Cookie的区分与解释
Mar 16 PHP
php实现jQuery扩展函数
Oct 30 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
Oct 25 PHP
window+nginx+php环境配置 附配置搭配说明
Dec 29 PHP
Thinkphp中的volist标签用法简介
Jun 18 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
Jan 20 PHP
php操作xml入门之cdata区段
Jan 23 PHP
PHP 常用的header头部定义汇总
Jun 19 PHP
php实现编辑和保存文件的方法
Jul 20 PHP
Zend Framework基本页面布局分析
Mar 19 PHP
PHP 类与构造函数解析
Feb 06 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函数重载的替代方法--伪重载详解
2015/05/08 PHP
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
javascript 函数参数限制说明
2010/11/19 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
nodejs的require模块(文件模块/核心模块)及路径介绍
2013/01/14 NodeJs
jQuery搜索子元素的方法
2015/02/10 Javascript
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
在WordPress中加入Google搜索功能的简单步骤讲解
2016/01/04 Javascript
javascript匀速动画和缓冲动画详解
2016/10/20 Javascript
IntersectionObserver API 详解篇
2016/12/11 Javascript
一次围绕setTimeout的前端面试经验分享
2017/06/15 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
2017/07/13 Javascript
Angularjs上传文件组件flowjs功能
2017/08/07 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
vue select组件的使用与禁用实现代码
2018/04/10 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
2020/10/31 Javascript
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
python如何操作mysql
2020/08/17 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
2020/12/17 Python
基本款天堂:Everlane
2017/05/13 全球购物
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
简历里的自我评价
2014/01/31 职场文书
学习雷锋倡议书
2014/04/15 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
优秀会计求职信
2014/07/04 职场文书
亚布力滑雪场导游词
2015/02/09 职场文书
神龙架导游词
2015/02/11 职场文书
招商银行收入证明
2015/06/17 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python
Java Kafka 消费积压监控的示例代码
2021/07/01 Java/Android