php设计模式之委托模式

本文介绍了一种通过委托模式改进CD类播放模式的方法。改进前,播放模式的选择较为复杂;改进后,通过将播放模式作为参数传入playList函数简化了流程。这种方式不仅提高了代码的灵活性,还使得播放模式的选择更为直观。

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


转载于:https://my.oschina.net/tongjh/blog/614653

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值