Ich hätte das eingangs dargestellte Problem so modelliert:
Parents vererben den Namen an alle Kinder. Nicht nur die Eigenschaft an sich, sondern den aktuellen Wert.
Wie man leicht sieht ist die ChildClass hier völlig überflüssig. Refaktoriert bleibt das übrig:
Und siehe da, das ist eine Implementierung eines Prototype Pattern, giveBirth() ist die clone-Methode.
Dein zuletzt genanntes Szenario 'settings' verlangt eher das Decorator Pattern. Denn die Anforderung "für eine besondere aufgabe gibt es zusätzliche werte" läßt sich nicht sauber mit nur einer Klasse erschlagen.
PHP-Code:
class ParentClass {
public $name;
protected $children = array();
public function __construct($name) {
$this->name = $name;
}
public function giveBirth() {
$this->children[] = new ChildClass($this->name);
}
public function adopt(ChildClass $child) {
$child->name = $this->name;
$this->children[] = $child;
}
}
class ChildClass extends ParentClass {}
$parent = new ParentClass('Meier');
$parent->giveBirth();
Wie man leicht sieht ist die ChildClass hier völlig überflüssig. Refaktoriert bleibt das übrig:
PHP-Code:
class HumanClass {
public $name;
protected $children = array();
public function __construct($name) {
$this->name = $name;
}
public function giveBirth() {
$this->children[] = new HumanClass($this->name);
}
public function adopt(HumanClass $child) {
$child->name = $this->name;
$this->children[] = $child;
}
}
Dein zuletzt genanntes Szenario 'settings' verlangt eher das Decorator Pattern. Denn die Anforderung "für eine besondere aufgabe gibt es zusätzliche werte" läßt sich nicht sauber mit nur einer Klasse erschlagen.
Kommentar