예제 #1
0
    {
        $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();
예제 #2
0
    $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";