Home  >  Article  >  Backend Development  >  Detailed explanation of the delegation pattern of PHP design patterns

Detailed explanation of the delegation pattern of PHP design patterns

*文
*文Original
2018-01-05 17:55:421657browse

委托是对一个类的功能进行扩展和复用的方法。它的做法是:写一个附加的类提供附加的功能,并使用原来的类的实例提供原有的功能,接下来通过本文给大家介绍PHP委托设计模式实例详解,感兴趣的朋友一起学习吧。希望对大家有所帮助。

模式定义

委托是对一个类的功能进行扩展和复用的方法。它的做法是:写一个附加的类提供附加的功能,并使用原来的类的实例提供原有的功能。

假设我们有一个 TeamLead 类,将其既定任务委托给一个关联辅助对象 JuniorDeveloper 来完成:本来 TeamLead 处理 writeCode 方法,Usage 调用 TeamLead 的该方法,但现在 TeamLead 将 writeCode 的实现委托给 JuniorDeveloper 的 writeBadCode 来实现,但 Usage 并没有感知在执行 writeBadCode 方法。

设计了一个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] . &#39;.mp3&#39;; 
} 
public function playMp4($song) { 
return $this->cdInfo[$song] . &#39;.mp4&#39;; 
} 
} 
$oldCd = new cd; 
$oldCd->addSong("1"); 
$oldCd->addSong("2"); 
$oldCd->addSong("3"); 
$type = &#39;mp3&#39;; 
if ($type == &#39;mp3&#39;) { 
$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].&#39;.mp3&#39;;
}
}
//mp4处理类
class mp4 implements Delegate{
public function playList($list, $song)
{
return $list[$song].&#39;.mp4&#39;;
}
}
class cdDelegate{
protected $cdInfo = array();

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

public function play($type,$song){
$name = &#39;\Tools\\&#39;.$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(&#39;mp3&#39;,&#39;1&#39;);//只要传递参数就能知道需要选择何种播放模式

相关推荐:

详解PHP设计模式之备忘录模式

详解PHP设计模式之建造者模式

PHP设计模式之迭代器模式详解

The above is the detailed content of Detailed explanation of the delegation pattern of PHP design patterns. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn