文档章节

php设计模式之委托模式

别人说我名字很长
 别人说我名字很长
发布于 2016/02/13 14:25
字数 334
阅读 120
收藏 4

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

设计了一个cd类,类中有mp3播放模式,和mp4播放模式
改进前,使用cd类的播放模式,需要在实例化的类中去判断选择什么方式的播放模式
改进后,播放模式当做一个参数传入playList函数中,就自动能找到对应需要播放的方法。

一,未改进前

<?php  
//使用委托模式之前,调用cd类,选择cd播放模式是复杂的选择过程  
class cd {  
    protected $cdInfo = array();   
      
    public function addSong($song) {  
        $this->cdInfo[$song] = $song;  
    }  
      
    public function playMp3($song) {  
        return $this->cdInfo[$song] . '.mp3';  
    }  
      
    public function playMp4($song) {  
        return $this->cdInfo[$song] . '.mp4';  
    }  
}  
$oldCd = new cd;  
$oldCd->addSong("1");  
$oldCd->addSong("2");  
$oldCd->addSong("3");  
$type = 'mp3';  
if ($type == 'mp3') {  
    $oldCd->playMp3();  
} else {  
    $oldCd->playMp4();  
}



二、通过委托模式,改进后的cd类

<?php

namespace Tools;

/*
委托模式
去除核心对象中的判决和复杂功能性
*/

//委托接口
interface Delegate{
	public function playList($list,$song);
}

//mp3处理类
class mp3 implements Delegate{
	public function playList($list,$song){
		return $list[$song].'.mp3';
	}
}

//mp4处理类
class mp4 implements Delegate{
	public function playList($list, $song)
	{
		return $list[$song].'.mp4';
	}
}

class cdDelegate{
	protected $cdInfo = array();

	public function addSong($song){
		$this->cdInfo[$song] = $song;
	}

	public function play($type,$song){
		$name = '\Tools\\'.$type;
		$obj =  new $name;
		return $obj->playList($this->cdInfo,$song);
	}
}

$newCd = new cdDelegate();
$newCd->addSong("1");
$newCd->addSong("2");
$newCd->addSong("3");
echo $newCd->play('mp3','1');//只要传递参数就能知道需要选择何种播放模式


本文转载自:http://blog.csdn.net/initphp/article/details/7684476

别人说我名字很长
粉丝 58
博文 265
码字总数 113918
作品 0
济南
程序员
私信 提问
加载中

评论(2)

别人说我名字很长
别人说我名字很长 博主

引用来自“chinaschatten”的评论

可以问一下新手学PHP需要什么呢
http://www.runoob.com/php/php-tutorial.html 推荐你照着这个教程学学,就主要的一定要记住多写,照抄也行,写个几万行后自然就熟练了
卢掌柜
卢掌柜
可以问一下新手学PHP需要什么呢
《PHP设计模式大全》系列分享专栏

《PHP设计模式大全》已整理成PDF文档,点击可直接下载至本地查阅 https://www.webfalse.com/read/201739.html 文章 php设计模式介绍之编程惯用法第1/3页 php设计模式介绍之值对象模式第1/5页...

kaixin_code
2018/11/06
237
0
结构型设计模式对比 设计模式(十六)

结构型设计模式 结构型模式关注于整体最终的结构,通过继承和组合,构建出更加复杂的结构 进而提供更加强大的逻辑功能 七种结构型模式 适配器模式(Adapter Pattern) 组合模式(Composite P...

osc_ddwjgohl
2018/12/07
4
0
还在用 if else?试试策略模式吧!

作者 | LA 来源 | 程序员小灰(ID:chengxuyuanxiaohui) 我们使用的App大多都有分享的功能,我们可以选择分享到不同的地方,比如微博、微信、QQ等等,虽然是同一个内容,但是分享到不同的平...

CSDN 程序人生
05/01
0
0
Java中常用的设计模式代码与理解

Java中常用的设计模式代码与理解 一、单例模式 1.饿汉式 (太饿了,类加载的时候就创建实例) /** 饿汉式单例模式 */public class HungrySingleInstance { }  所谓饿汉式单例设计模式,就是...

osc_jvfdkl2k
2019/12/04
3
0
还在使用 if else 写代码?试试 “策略模式” 吧!

我们使用的app大多都有分享的功能,我们可以选择分享到不同的地方,比如微博、微信、QQ等等,虽然是同一个内容,但是分享到不同的平台就会有不同的处理方式,比如要跳转到不同的app或者直接复...

微笑很纯洁
05/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

检测未定义的对象属性 - Detecting an undefined object property

问题: 检查JavaScript中的对象属性是否未定义的最佳方法是什么? 解决方案: 参考一: https://stackoom.com/question/79h/检测未定义的对象属性 参考二: https://oldbug.net/q/79h/Detec...

fyin1314
41分钟前
11
0
jasypt-spring-boot提示Failed to bind properties

1 问题描述 在Spring Boot中使用jasypt-spring-boot进行加密,但是提示: Description:Failed to bind properties under 'spring.datasource.password' to java.lang.String: Reason:......

氷泠
今天
29
0
在git 2.13之前,只保存多个已更改的文件中的一个文件

问题: 如何在我的分支上只隐藏多个已更改文件中的一个? 解决方案: 参考一: https://stackoom.com/question/Cl3h/在git-之前-只保存多个已更改的文件中的一个文件 参考二: https://oldb...

技术盛宴
今天
30
0
SQL笔记:把Excel的数据导入MySQL中作运算

很多Excel用户都知道,Excel单个工作簿单张表存储的数据量很有限(旧版本月60多万条记录,新版本也才104万条不到),而且Excel中,因为自带各种格式与公式,兼之高度封装性等原因,导致Excel...

tengyulong
今天
15
0
Qt创建Application的文件依赖浅析

在使用QtCreator创建Application程序时,会自动创建***.ui文件,在文件夹“build-***-Desktop_Qt_***-Debug”中生成ui_***.h,***.ui可以通过QtDesigner进行调整,同时还会在***.ui的文件夹内...

qwz185_堡垒
今天
27
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部