Objekte instanziieren

LILA

Aktives Mitglied
Hallo Forum,

schon wieder eine Frage, auf die ich keine Antwort weiß.

Eine normale Instanz wird ja wie folgt gebildet:

Java:
Klasse name = new Klasse();

Jetzt gibt es aber Klassen, von denen kann ich auf diese Weise kein solches Objekt bilden. Beispiele:

1.)
Java:
org.jdom.output.Format format = Format.getPrettyFormat();
2.)
Java:
javax.xml.transform.TransformerFactory tFactory = TransformerFactory.newInstance();

Einschub: Format ist public; TransformerFactory ist protected....

Wieso macht man das, dass diese Objekte nicht ganz normal instanziiert werden können?

Viele Grüße
 
Weil da vermutlich
Java:
private ClassConstructor() {
}
definiert ist...
Dazu gibt es schon einen Grund. Aber dann gibt es ggf. eine Factory, die dir die Klassen erzeugt.
 
Ich versteh deine Frage nicht? Ich denke die letzten beiden kannst du nicht normal Instanzieren sondern nur über getInstance z.b.

Wie ist genau also das Problem?

[EDIT]
Vergiss es. ich hab das "Wieso" als "Wie" gelesen
 
Das Thema mit der Factory (bei Dir TransformerFactory) ist etwas umfangreicher. Es handelt sich dabei um das Factory-Design-Pattern Factory. Hier kannst Du etwas darüber lesen: Factory Method Pattern in Java

Bei der Geschichte mit dem Format macht man das eigentlich nur, weil man sprechende Methodennamen für den verwendeten Modus benutzen möchte. Es gibt da z.B. getPrettyFormat(), getCompactFormat() oder getRawFormat(). Letzten endes instantiieren die alle nur einfach ein Objekt vom Typ Format und setzen anschließend noch eine Option für dieses Objekt. Es dient eigentlich nur als eine Erleichterung. Der Konstruktor wurde im Falle von Format daher auf private gesetzt
 
Es gibt viele Gründe, den Konstruktor privat zu machen. Eine Methode muss z.B. im Gegensatz zu einem Konstruktor nicht unbedingt den "genauen" Typ zurückliefern. Nehmen wir z.B. die Methode Calendar.getInstance(): Je nach Rechner-Einstellungen kann sie unterschiedliche Calendar-Implementierungen zurückliefern, etwa einen Gregorianischen Kalender für westliche Länder, einen muslimischen Kalender für arabische Länder und in Japan einen japanischen Kalender, der weiß, was Meiji 28 oder Heisei 5 bedeutet. Ein Konstruktor hätte so eine Flexibilität nicht, und für mich als Nutzer ist der Aufruf der Factory-Methode viel bequemer als die richtige Implementierung "per Hand" heraussuchen zu müssen. Und wenn ein neuer Kalendertyp hinzugefügt wird, brauche ich meinen eigenen Code nicht zu ändern, ich bekomme einfach einen "passenderen" Kalender zurück, ohne dass ich etwas dafür tun müsste.
 

Zurück
Oben