PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fabrikmethode (virtueller Konstruktor)



lousypoetry
15-10-2005, 10:58
Hallo zusammen!

Ich beschäftige mich grad mit Entwurfsmustern, genauer gesagt mit der Fabrikmethode (virtueller Konstruktor).

Hat vielleicht jemand von euch ein gutes Beispiel oder eine Erklärung, das bzw. die zu meiner Erleuchtung beitragen könnte? Ich glaube ich hab ungefähr verstanden, wie man virtuelle Konstruktoren benutzt, scheiter aber an dem wann bzw wozu.

Danke! :)

anda_skoa
15-10-2005, 13:15
Das macht man, wenn man auf Grund eines Parameters oder eine Systemeinstellung oder ähnlichem eine andere Klasse (von der selben Subklasse abgeleitet oder das selbe Interface implementierend) instanziieren möchte.

Gute Beispiele in der Java Class Lib sind java.util.Calendar, wo anhängig von den Systemeinstellungen des Benutzers zB ein gregorianischer Kalendar oder vielleicht ein Hebräischer/Moslemischer/Buddistischer Kalendar erzeugt wird.

Bzw die Formatierer in java.text, die zB anhängig von der Systemeinstellung Formatierer für Komma als Dezimaltrennzeichen oder Punkt als Dezimaltrennzeichen erstellen.

Edit: oder das Paradebeispiel für Konstruktion abhängig vom Parameter
Class.forName()

Erzeugt eine Klasse, die man als Parameter angibt.

Ciao,
_

lousypoetry
04-11-2005, 16:35
Das macht man, wenn man auf Grund eines Parameters oder eine Systemeinstellung oder ähnlichem eine andere Klasse (von der selben Subklasse abgeleitet


Ich hab dann doch eine Methode in einer Klasse, die aufgrund des Parameters entscheidet, von welcher Klasse sie ein Objekt zurückgibt, richtig? Also ungefähr so:



public Component create(int index) {

switch(index) {
case 0: return new Door();

case 1: return new Wall();

case 2: return new DoorWithSpell();

default: return null;
}
}


Wie mach ich das denn, wenn zB der Konstruktor von "Wall" Parameter erwartet? zB eine bestimmte Länge? Würde ich den Parameter dann erst der create()-Methode übergeben, auch wenn er ja vielleicht gar nicht gebraucht wird? Oder müsste ich die Methode überladen? Oder gibt es ne ganz andere Lösung?

Danke! :-)

anda_skoa
04-11-2005, 17:16
Eine Fabrikmethode erzeugt alle Objekte ansich gleich, d.h. sie haben auch üblicherweise die selben Parameter.

D.h. du könntest zwei Methoden machen, eine für Objekte ohne Länge, eine für Objekte mit Länge

Ciao,
_