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') { echo $oldCd->playMp3(1); } else { echo $oldCd->playMp4(2); } //委托模式-去除核心对象中的判决和复杂的功能性 //改进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); }