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
  | 
  |  |