php设计模式之委托模式
php设计模式之委托模式
别人说我名字很长 发表于2年前
php设计模式之委托模式
  • 发表于 2年前
  • 阅读 65
  • 收藏 4
  • 点赞 1
  • 评论 2

设计了一个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');//只要传递参数就能知道需要选择何种播放模式


共有 人打赏支持
粉丝 53
博文 227
码字总数 83765
评论 (2)
chinaschatten
可以问一下新手学PHP需要什么呢
别人说我名字很长

引用来自“chinaschatten”的评论

可以问一下新手学PHP需要什么呢
http://www.runoob.com/php/php-tutorial.html 推荐你照着这个教程学学,就主要的一定要记住多写,照抄也行,写个几万行后自然就熟练了
×
别人说我名字很长
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: