{ $output = ''; foreach ($this->trackList as $num => $track) { $output .= $num + 1 . ") {$track}. "; } return $output; } } class CDTrackListDecoratorCaps { private $__cd; public function __construct(CD $cd) { $this->__cd = $cd; } public function makeCaps() { foreach ($this->__cd->trackList as &$track) { $track = strtoupper($track); } } } $tracksFromExternalSource = array('What It Means', 'Brr', 'Goodbye'); $myCD = new CD(); foreach ($tracksFromExternalSource as $track) { $myCD->addTrack($track); } $myCDCaps = new CDTrackListDecoratorCaps($myCD); $myCDCaps->makeCaps(); print "The CD contains the following tracks: " . $myCD->getTrackList();
$myCD->addTrack($track); } print "The CD contains:{$myCD->getTrackList()}\n"; /** * 需求发生小变化: 要求每个输出的参数都采用大写形式. 对于这么小的变化而言, 最佳的做法并非修改基类或创建父 - 子关系, * 而是创建一个基于装饰器设计模式的对象。 * */ class CDTrackListDecoratorCaps { private $_cd; public function __construct(CD $cd) { $this->_cd = $cd; } public function makeCaps() { foreach ($this->_cd->trackList as &$track) { $track = strtoupper($track); } } } $myCD = new CD(); foreach ($tracksFroExternalSource as $track) { $myCD->addTrack($track); } //新增以下代码实现输出参数采用大写形式 $myCDCaps = new CDTrackListDecoratorCaps($myCD); $myCDCaps->makeCaps(); print "The CD contains:{$myCD->getTrackList()}\n";