Singelton Fabriken - Wohin mit getInstance?

Status
Nicht offen für weitere Antworten.

guni

Bekanntes Mitglied
hallo leute,
ich habe mehrere Klassen, die nach dem Fabrikmuster aufgebaut sind (eine create-Methode).
Sie alle erben von einer abstrakten Klasse AbstractCreator.
Gleichzeitig macht es ja Sinn, eine Fabrik als Singleton zu entwerfen (kein Konstruktor, eine statische getInstance-Methode),da sie ja nicht mehrfach initialisiert werden muss ...
ich habe also folgenden Code:
[highlight=Java]
public abstract class AbstractCreator {
public void create(){
// hier steht mein allgemeiner Code
concreteCreation();
}
protected abstract void concreteCreation();
}
[/highlight]
[highlight=Java]
public class FolderCreator {
@Override
protected void concreteCreation() {
// hier steht mein konkreter Code
}
}
[/highlight]
[highlight=Java]
public class FileCreator {
@Override
protected void concreteCreation() {
// hier steht mein konkreter Code
}
}
[/highlight]
meine Frage ist: wohin mit den Singleton-Methoden?
da meine AbstractCreator ja abstrakt ist, kann ich hier keine getInstance schreiben!
auf der anderen Seite kann ich ja bei 20 verschiedenen konkreten Fabriken nicht überall die gleiche getInstance reinkopieren, oder? das wäre doch auch nicht schön!

lg, guni
 
S

SlaterB

Gast
von den meisten wirst du gleich hören, dass du gar kein Singleton benutzen sollst ;) ,
oder siehe Forumsuche (oder schon bekannt bei 230 Postings, dann mutige Frage ;) )

neutral geantwortet:
statische Methoden kann man nicht vererben, die musst du jeweils einzeln deklarieren,

auch mit nur einer Klasse, welche auf die anderen verweist, ob statisch oder nicht, wirst du nicht wesentlich vorankommen,
für jede Factory brauchst du einen unterschiedlichen Rückgabewert, also sowieso unterschiedliche Methoden
 

guni

Bekanntes Mitglied
... ok. habe bei dieser Diskussion auch mal meine Meinung geposted.
Im Übrigen habe ich mich auf Empfehlung des Buches "Effektiv Java programmieren" von Joshua Bloch für Singletons entschieden. (Thema 2: Erzwingen Sie mit einem privaten Konstruktor die Singleton-Eigenschaft)
 

Ebenius

Top Contributor
Die zugrunde liegende Frage ist: Bin ich mir sicher, dass in diesem Kontext und jedem in absehbarer Zukunft daraus erwachsenden Kontext die Klasse tatsächlich nur eine Instanz haben soll. Wenn dem so ist, ist Singleton okay. Die Frage selbst eben oft schwer zu beantworten.

Was spricht denn dagegen, die Instanz des Creators zu erzeugen wenn man sie benötigt und zu vergessen wenn man sie nicht mehr braucht?

Ebenius
 
S

Spacerat

Gast
Kann ja sein, das das auch noch irgendwo anders steht und du es bereits in deinem Buch gelesen hast...
Laut Guido Krüger (www.javabuch.de - Das Handbuch der Java-Programmierung) jedenfalls, sind "Factory" und "Singleton" zwei unterschiedliche Design-Patterns bzw. Entwurfsmuster.
Singleton: Wirklich nur eine Instanz der Klasse.
Factory: ein oder mehrere Instanzen einer speziellen Implementation einer Klasse.
 

guni

Bekanntes Mitglied
@Ebenius: Wieso sollte ich von einer Factory (die ja nichts anderes macht als Objekte zu erzeugen) jemals mehr als eine Instanz brauchen?

@Spacerat: ich hab ja nie behauptet, dass Factory und Singleton ein und dasselbe sind. Alles was ich wollte ist eine Kombination dieser beiden Patterns und ein Versuch, meine getInstance nur einmal schreiben zu müssen ...

lg
 

Ebenius

Top Contributor
@Ebenius: Wieso sollte ich von einer Factory (die ja nichts anderes macht als Objekte zu erzeugen) jemals mehr als eine Instanz brauchen?
Eventuell weil Du auf verschiedene Arten Objekte bauen können willst. Es gibt oft abstrakte Fabriken, zum Beispiel TransformerFactory. Man weiß vielleicht nicht von vorn herein, dass man später Fabriken unterschiedlich initialisieren wollen wird, um unterschiedlich erzeugte Objekte bauen zu können.

Ebenius
 

foobar

Top Contributor
Kann ja sein, das das auch noch irgendwo anders steht und du es bereits in deinem Buch gelesen hast...
Laut Guido Krüger (www.javabuch.de - Das Handbuch der Java-Programmierung) jedenfalls, sind "Factory" und "Singleton" zwei unterschiedliche Design-Patterns bzw. Entwurfsmuster.
Singleton: Wirklich nur eine Instanz der Klasse.
Factory: ein oder mehrere Instanzen einer speziellen Implementation einer Klasse.

Das stimmt natürlich, aber normalerweise braucht man nur eine Instanz einer Factory pro Anwendung daher werden die beiden Pattern oft gemeinsam genutzt.
 
S

Spacerat

Gast
Ich hab' auch nie behauptet, du hättest behauptet usw...
Nein, worauf ich hinaus wollte, ist, das ich da gar keinen Sinn drin sehe, die beiden Patterns zu mischen. Mir fällt jedenfalls keiner ein. Was ich alledings hätte schreiben können: Singletons erstellen wirklich nur eine Instanz einer konkreten Klasse, während Factorys verschiedene Instanzen einer abstrakten Klasse produzieren.
Weshalb also 'ne Factory, wenn am Ende eh' ein Singleton rauskommen soll?
foobar hat gesagt.:
Das stimmt natürlich, aber normalerweise braucht man nur eine Instanz einer Factory pro Anwendung daher werden die beiden Pattern oft gemeinsam genutzt.
Ja, so kenn ich das auch.[highlight=java]Factory.getInstance().generateObject()[/highlight]
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
nicht die Klasse, deren Objekte von der Factory erzeugt werden (oder deren Subklassen) sollen ein Singleton sein,
sondern die Factory-Klasse selber ;)
 
M

maki

Gast
Factory:
1. Factory Method, manchmal statisch, eigentlich kein Kandidat für ein Singleton
2. Absract Factory, wurde "früher" oft als Singleton implementiert.

von den meisten wirst du gleich hören, dass du gar kein Singleton benutzen sollst ;)
Die meisten in diesem Forum finden Singletons gut, laut Umfrage ;) (@TS: Gehöre nicht dazu)
 

Ebenius

Top Contributor
Die meisten in diesem Forum finden Singletons gut, laut Umfrage ;) (@TS: Gehöre nicht dazu)
Ich bin ja kein Statistiker. Aber im richtigen Kontext: Derzeit haben 68 der 9450 Benutzer im Java-Forum abgestimmt. Von diesen 68 kamen 51 zur Überzeugung, dass Singleton manchmal sinnvoll ist und gelegentlich verwendet wird. Das liest sich irgendwie ganz anders... Hm... ;)

Ebenius
 

MarcB

Bekanntes Mitglied
Das Abstract Factory Pattern hat nix mit abstrakten Klassen zu tun!
Das abstrakte daran ist, das es eine Schnittstelle zu einer Gruppe (Familie) von Factorys bietet, d.h. keine Kenntnis davon hat, welche Klassen nun konkret instanziiert werden.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I OOP Verständnisfrage zu Singelton Pattern Java Basics - Anfänger-Themen 21
B Swing mit Fabriken Java Basics - Anfänger-Themen 6
S Wohin kommt das „abstract“? Vor oder nach „public“/ „private“ /... Java Basics - Anfänger-Themen 3
A Reader wohin werden Daten gespeichert? Java Basics - Anfänger-Themen 7
N Methoden Wohin mit einer Methode die in unterschiedlichen Klassen verwendet wird? Java Basics - Anfänger-Themen 5
N jpos.xml wohin damit? Java Basics - Anfänger-Themen 9
I Methoden Wohin gehört getImage()? Java Basics - Anfänger-Themen 1
nrg Wohin mit Factory Methoden? Java Basics - Anfänger-Themen 3
L Variable..aber wohin? Java Basics - Anfänger-Themen 16
L Externe Dateien, wohin? Java Basics - Anfänger-Themen 7
Hindi93 Neue Libs - wohin damit? Java Basics - Anfänger-Themen 7
F DocumentListener - Wohin damit? Java Basics - Anfänger-Themen 10
A wohin mit der Main! Java Basics - Anfänger-Themen 2
K Wohin gehört in Eclipse ein jpeg-Bild ? Java Basics - Anfänger-Themen 4
G Wohin mit Konstanten? Java Basics - Anfänger-Themen 12
B Wohin mit der Main-Methode? HILFE! ("Exception in thr.) Java Basics - Anfänger-Themen 19
G Wohin Datenbank speichern? Java Basics - Anfänger-Themen 4
P Import jar files: Wohin? Java Basics - Anfänger-Themen 2
G Wohin Gui - Code? Java Basics - Anfänger-Themen 5
M Wohin mit den JAVA Libraries (spring, jalopy etc.) ? Java Basics - Anfänger-Themen 2
P wohin muss ich die packages kopieren? Java Basics - Anfänger-Themen 12
F POI-Anfänger, wohin mit dem poi.jar Java Basics - Anfänger-Themen 4
B javax entpacken - aber wohin? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben