Zrobię to na przykładzie. Mamy Pizzerię, która przygotowuje pizze, samą Pizzę oraz fabrykę pizz (PizzaFactory).
Wzorzec fabryki wygląda następująco:
Kod
class Pizzeria
{
private $fabryka;
function __construct()
{
$this->fabryka = new PizzaFactory();
}
function przygotujPizze($nazwaPizzy)
{
$pizza = $this->fabryka->make($nazwaPizzy);
$this->podgrzejPizze($pizza);
//... itd
return $pizza;
}
}
class PizzaFactory
{
function make($nazwaPizzy)
{
//przykladowa implementacja
if ($nazwaPizzy == "margerita")
return new Margerita();
else if ($nazwaPizzy == "americana")
return new Americana();
//... itd
}
}
Być może ten wzorzec nie jest tym czego potrzebujesz dokładnie (w twoim kodzie używasz funkcji statycznej). Są jeszcze inne podobne wzorce, które mogą być pomocne: metoda fabrykująca, singleton