Erzeugungsprozess |
kapseln
vor den Anwendern verstecken
|
| |
|
"naive" OOP
Konstruktoren über die gesamten Quellen verstreut
|
| |
|
Konstruktor <--> Klassenname
Klienten kennen konkrete Spezialklassen
|
| |
|
unwartbar
unflexibel
|
| |
|
Erzeugung von konkreten Objekten nicht direkt vom Klienten
sondern über eine definierte Schnittstelle
|
|
static member Funktionen
|
|
keine public Konstruktoren
|
| |
Beispiel |
verkettet Liste in Java
|
|
public
class LinkedList {
private
LinkedList next;
private
Object info;
protected
static
LinkedList EMPTY = new LinkedList();
protected
LinkedList() {
next = null;
info = null;
}
public
static
LinkedList empty() {
return EMPTY;
}
public
static
LinkedList singleton(Object e) {
LinkedList res = new LinkedList();
res.next = EMPTY;
res.info = e;
return res;
}
}
|
| |
|
leere Liste: Referenz auf ein Spezialobjekt
|
| |
|
zwei Fabrikmethoden
|
|
public static
LinkedList LinkedList.empty();
public static
LinkedList LinkedList.singleton(Object e);
|
| |
|
Konstruktionsprozess versteckt
leere Liste ist ein Singleton.
|
| |
|
Beispiel ist nur der 1. Schritt
möglicherweise zusätzliche Indirektstufen notwendig
|
| |
|
virtuelle Funktionen anstatt statische Funktionen
erhöhte Flexibilität
|
| |