Aggregiert ein Objekt ein anderes, so wird das aggregierte Objekt häufig im Konstruktor erzeugt und in der entsprechenden Instanzvariablen abgelegt (Beispiel 2.2). Auf diese Weise steht das aggregierte Objekt für den gesamten Lebenszyklus des aggregierenden Objektes zur Verfügung und kann beispielsweise von dessen Methoden genutzt werden.
Beispiel 2.2: Die Klasse ExpensiveInitialization
<?php
require_once 'SomeClass.php';
class ExpensiveInitialization {
private $aggregatedObject;
public function __construct() {
$this->aggregatedObject = new SomeClass;
}
}
?>
Für den Fall, dass die Methoden des aggregierenden Objektes eher
selten auf das aggregierte Objekt für die Ausführung ihrer
Aufgaben zugreifen müssen, kann das oben beschriebene Verfahren
eher ungeeignet sein. Ist die Erzeugung des aggregierten Objektes
teuer, was beispielsweise bei der Kapselung von Ressourcen wie
Datenbankverbindungen durch das aggregierte Objekt der Fall ist,
ist es sinnvoll, das aggregierte Objekt erst bei seiner ersten
Verwendung zu erzeugen. Dieses Konzept wird Lazy Initialization
genannt und kann beispielsweise mit der Interzeptormethode
__get($memberName)
(Beispiel 2.3)
implementiert werden.
Beispiel 2.3: Die Klasse LazyInitialization
<?php
require_once 'SomeClass.php';
class LazyInitialization {
public function __get($memberName) {
if ($memberName == 'aggregatedObject') {
$this->aggregatedObject = new SomeClass;
return $this->aggregatedObject;
}
}
}
?>