<?php
//工厂设计模式提供获取某个对象的新实例的一个接口,同时使调用代码避免确定实际实例化基类的步骤。
class CD{
public $title = '';
public $band = '';
public $tracks = [];
public function __construct(){
}
public function setTitle($title){
$this->title = $title;
}
public function setBand($band){
$this->band = $band;
}
public function addTrack($track){
$this->tracks[] = $track;
}
}
$title = 'Waste of a Rib';
$band = 'Never Again';
$tracksFromExternalSource = ['What It Means', 'Brrr', 'Goodbye'];
$cd = new CD();
$cd->setTitle($title);
$cd->setBand($band);
foreach($tracksFromExternalSource as $track){
$cd->addTrack($track);
}
print_r($cd->tracks);
echo PHP_EOL;
class enhancedCD{
public $title = '';
public $band = '';
public $tracks = [];
public function __construct(){
$this->tracks[] = 'DATA TRACK';
}
public function setTitle($title){
$this->title = $title;
}
public function setBand($band){
$this->band = $band;
}
public function addTrack($track){
$this->tracks[] = $track;
}
}
class CDFactory{
public static function create($type){
$class = strtolower($type).'CD';
return new $class;
}
}
$type = 'enhanced';
$cd = CDFactory::create($type);
$cd->setBand($band);
$cd->setTitle($title);
foreach($tracksFromExternalSource as $track){
$cd->addTrack($track);
}
print_r($cd->tracks);