Ik ben me momenteel aan het verdiepen in de verschillende Design Patterns (voornamelijk van GoF) en heb hierover de volgende vraag:
Overal waar ik kijk worden Factories eerst geinstantieerd, waarna de methoden worden aangeroepen. Waarom zou ik een factory niet op een statische manier aanroepen (scheelt code toch?):
Zoals ik het vaak zie:
$factory = new ObjectFactory;
$object = $factory->makeNewObject();
Zoals ik het wil zien:
$object = ObjectFactory::makeNewObject();
Dus waarom gebruikt iedereen de eerste methode, terwijl de tweede methode simpeler lijkt?
Het feit dat je telkens dezelfde instance krijgt is voor mij al het punt om ervan af te stappen, maar ik kan begrijpen dat beginners zoals de TS dit waarschijnlijk wel een mooi pattern vinden.
Om het topic wat completer te maken zou ik mijn vorm hier neer zetten, de Service container:
<?php
$container = new Container();
$container->set('pizzaria', function($c) {
return new Pizzaria();
});
$container->set('pizza', function($c) {
if (!isset($c->get('pizza.type')) {
// ... error
}
switch ($c->get('pizza.type')) {
case 'salami':
$pizza = new SalamiPizza();
break;
return $waiter[0]; // krijg de eerste vrije ober
});
// gebruik
$container->set('pizza.type', 'salami');
$pizza = $container->get('pizza');
if ($pizza->isBaked()) {
$container->get('service.waiter')->serve($pizza);
}
?>
[hr]
Ward, dat van jou gaat zijn nut voor bij. Het Factory pattern komt voor uit het feit dat je het geen dat variabel is moet weghalen uit het geen dat constant blijft. Niet door iets constants in de Factory te stoppen.