Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP委托模式详解及案例

PHP委托模式详解及案例

墨辰丷
墨辰丷asal
2018-05-16 14:07:121159semak imbas

本篇文章主要介绍PHP委托模式详解及案例,感兴趣的朋友参考下,希望对大家有所帮助。

委托模式

通过分配或委托其他对象,委托设计模式能够去除核心对象中的判决和复杂的功能性。

应用场景

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

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

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

代码:cd类,未改进之前,选择播放模式是一种痛苦的事情

<?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  
//委托模式-去除核心对象中的判决和复杂的功能性  
//改进cd类  
class cdDelegate {  
    protected $cdInfo = array();   
      
    public function addSong($song) {  
        $this->cdInfo[$song] = $song;  
    }  
      
    public function play($type, $song) {  
        $obj = new $type;  
        return $obj->playList($this->cdInfo, $song);  
    }  
}  
  
class mp3 {  
    public function playList($list) {  
        return $list[$song];  
    }  
}  
  
class mp4 {  
    public function playList($list) {  
        return $list[$song];  
    }  
}  
  
$newCd = new cd;  
$newCd->addSong("1");  
$newCd->addSong("2");  
$newCd->addSong("3");  
$type = &#39;mp3&#39;;  
$oldCd->play(&#39;mp3&#39;, &#39;1&#39;); //只要传递参数就能知道需要选择何种播放模式

相关推荐:

php中的委托模式实例教程

PHP面向对象进阶设计模式:委托模式使用实例

php设计模式之委托模式

Atas ialah kandungan terperinci PHP委托模式详解及案例. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn