当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP常用设计模式之委托设计模式

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-09 14:49:30 浏览: 评论:0 

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

模式定义

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

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

设计了一个cd类,类中有mp3播放模式,和mp4播放模式

改进前,使用cd类的播放模式,需要在实例化的类中去判断选择什么方式的播放模式

改进后,播放模式当做一个参数传入playList函数中,就自动能找到对应需要播放的方法。

一,未改进前

  1. <?php  
  2. //使用委托模式之前,调用cd类,选择cd播放模式是复杂的选择过程  
  3. class cd {  
  4. protected $cdInfo = array();  
  5. public function addSong($song) {  
  6. $this->cdInfo[$song] = $song;  
  7. }  
  8. public function playMp3($song) {  
  9. return $this->cdInfo[$song] . '.mp3';  
  10. }  
  11. public function playMp4($song) {  
  12. return $this->cdInfo[$song] . '.mp4';  
  13. }  
  14. }  
  15. $oldCd = new cd;  
  16. $oldCd->addSong("1");  
  17. $oldCd->addSong("2");  
  18. $oldCd->addSong("3");  
  19. $type = 'mp3';  
  20. if ($type == 'mp3') {  
  21. $oldCd->playMp3();  
  22. else {  
  23. $oldCd->playMp4();  

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

  1. <?php 
  2. namespace Tools; 
  3. /* 
  4. 委托模式 
  5. 去除核心对象中的判决和复杂功能性 
  6. */ 
  7.  
  8. //委托接口 
  9. interface Delegate{ 
  10. public function playList($list,$song); 
  11. //mp3处理类 
  12. class mp3 implements Delegate{ 
  13. public function playList($list,$song){ 
  14. return $list[$song].'.mp3'
  15. //mp4处理类 
  16. class mp4 implements Delegate{ 
  17. public function playList($list$song
  18. return $list[$song].'.mp4'
  19. class cdDelegate{ 
  20. protected $cdInfo = array(); 
  21.  
  22. public function addSong($song){ 
  23. $this->cdInfo[$song] = $song
  24.  
  25. public function play($type,$song){ 
  26. $name = '\Tools\\'.$type
  27. $obj = new $name
  28. return $obj->playList($this->cdInfo,$song); 
  29. $newCd = new cdDelegate(); 
  30. $newCd->addSong("1"); 
  31. $newCd->addSong("2"); 
  32. $newCd->addSong("3"); 
  33. echo $newCd->play('mp3','1');//只要传递参数就能知道需要选择何种播放模式 

以上内容给大家介绍了PHP委托设计模式实例详解,希望对大家有所帮助。

Tags: PHP设计模式

分享到: