MiksIrЭто Фабричный метод (дочерние классы реализуют фабричный метод)
abstract class GoCar
{
public function rideInCar()
{
$car = $this->createCar();
$car->go();
return $car;
}
abstract public function createCar();
}
class GoToyota extends GoCar
{
public function createCar() {return new Toyota();}
}
class GoMitsubishi extends GoCar
{
public function createCar() {return new Mitsubishi();}
}
Это абстрактная фабрика (создание семейства продуктов)
abstract class ProductionCar
{
abstract public function createToyota(){}
abstract public function createMitsubishi(){}
}
class ProductionEurope extends ProductionCar
{
public function createToyota() {return new EuropeToyota();}
public function createMitsubishi(){return new EuropeMitsubishi();}
}
class ProductionChina extends ProductionCar
{
public function createToyota() {return new ChinaToyota();}
public function createMitsubishi(){return new ChinaMitsubishi();}
}
Топикстартер простая фабрика (SimpleFactory), но лучше разделять по конкретным API, так как если изменить ключевое слово в блоке swith изменения повлекут по всем "клиентам"
class CarSympleFactory
{
public function createToyota(){return new Toyota();}
public function createMitsubishi(){return new Mitsubishi();}
}