Einzelnen Beitrag anzeigen
Alt 07.10.2004, 11:43  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Erstmal würde ich anmerken, dass es zwei GoF-Design-Patterns mit "Factory" im Namen gibt, nämlich die "Abstract Factory" und die "Factory Method". Die Abstract Factory ist hier falsch. Eine "Factory Class" gibt es nach GoF nicht.

Die Factory Method ist nicht viel mehr als eine Methode, die ein Objekt erstellt und zurückliefert, wobei unter verschiedenen Umständen unterschiedliche Objekte geliefert werden.

Die vorgeschlagene Implementation aus dem Jahre 1994 sieht vor, dass diese Factory Method eine Methode einer Klasse ist und bei Bedarf in einer davon abgeleiteten Klasse überschrieben wird.
Für C++ ist aber z.B. auch vorgeschlagen, STL-Templates zu verwenden, um zu vermeiden, dass man eine neue Sub-Klasse erstellen muss, nur um die eine Methode zu überschreiben.

Auch wenn es anders vorgesehen ist, Erich Gamma wird sich schon nicht nachts im Bett umdrehen, nur weil man ein wenig dreckig eine Funktion irgendwie dazu bringt, ein Objekt der richtigen Klasse zurückzuliefern, z.B. indem man über class_exists() abfragt, ob die zweite Klasse existiert und dann diese statt er ersten verwendet, oder indem der Name der zu instanziierenden Klasse in einer Variable abgelegt wird.
Ebenso sollte die Factory eigentlich ein Objekt sein, wobei man eben dieses Objekt austauschen würde, wenn die Factory andere Objekte liefern soll. So lange man kein ordentliches OOP macht und die verschiedenen Factories, die man braucht, ordentlich mitschleift, z.B. in Container-Objekten, ist es aber durchaus legitim, die Factory Method statisch aufzurufen, oder gar als einfache Funktion (ganz ohne Klasse), wobei mir der statische Aufruf doch lieber wäre.
__________________
mod = master of disaster
Waq ist offline   Mit Zitat antworten