Factory Pattern
Factory Pattern st ein netter Helfer, wenn man eine Klasse erzeugen möchte, den Konstruktor aber nicht so direkt nutzen kann oder will. Man erstellt also eine zweite Klasse, die Factory. In dieser Klasse stellt man Methoden bereit, die ein Objekt der ersten Klasse, die man ja eigentlich nutzen will, zurückliefert. Die Methoden können auch statisch sein.
- Natürlich gibt es bei der Factory auch Nachteile. Dazu gehört bspw. die Tatsache, dass man um ein Objekt zu erzeugen 2 Klassen benötigt. Einerseits die Factory und andererseits die Klasse, die von der Factory geliefert werden soll. In einer kleinen überschaubaren Anwendung ist dieser Overhead vertretbar.
Quellcode
factory.php
class Car {
private $color = null;
public function __construct() {
$this->color = "white";
}
public function setColor($color) {
$this->color = $color;
}
public function getColor() {
return $this->color;
}
}
class CarFactory {
private function __construct() {
}
public static function getBlueCar() {
return self::getCar("blue");
}
public static function getRedCar() {
return self::getCar("red");
}
private static function getCar($color) {
$car = new Car();
$car->setColor($color);
return $car;
}
}
$car1 = CarFactory::getBlueCar();
echo "Car 1 is ".$car1->getColor() ."<br>";
$car2 = CarFactory::getRedCar();
echo "Car 2 is ".$car2->getColor() ."<br>";
$car3 = new Car();
echo "Car 3 is ".$car3->getColor() ."<br>";
Ausgabe
Car 1 is blue
Car 2 is red
Car 3 is white