装饰器设计模式是什么?
PHP 基础面试题
<?php
//如果已有对象的部分内容或功能性发生改变,但是不需要修改原始对象的结构,那么使用装饰器设计模式最适合。
class CD{
public $trackList;
public function __construct(){
$this->trackList = [];
}
public function addTrack($track){
$this->trackList[] = $track;
}
public function getTrackList(){
$output = '';
foreach($this->trackList as $num => $track){
$output .= ($num + 1). "){$track}.";
}
return $output;
}
}
$tracksFromExternalSource = ['What It Means', 'Brr', 'Goodbye'];
$myCD = new CD();
foreach($tracksFromExternalSource as $track){
$myCD->addTrack($track);
}
class CDTrackListDecoratorCaps{
private $_cd;
public function __construct($cd){
$this->_cd = $cd;
}
public function makeCaps(){
foreach ($this->_cd->trackList as $k => $track) {
$this->_cd->trackList[$k] = strtoupper($track);
}
}
}
$myCDCaps = new CDTrackListDecoratorCaps($myCD);
$myCDCaps->makeCaps();
echo "The CD contains the following tracks:".$myCD->getTrackList();