Also ich habe eine Klasse Data in der ich alle Variablen usw. haben und diese über methoden verändern kann usw.
public String get....
public void set....
usw.
Variablen ansich sind private
Jetzt habe ich aber das Problem, dass 2 Klassen auf die Klasse Data zugreifen müssen.
Aber wenn ich in beiden Klassen Data d1 = new ´Data() mache, dann habe ich ja 2 verschiedene Objecte von data und nicht das was ich brauche, denn beide Klassen sollen das Gleiche object verwenden..
Oder bleibt hier nichts anderes übrig als das ganze static zu machen?
Will nicht umbedingt mit static arbeiten, aber wenn das die einzige möglichkeit ist?
Habt ihr ne meinung dazu wie ich das beheben kann, dass ich aus 2 Klassen auf eine zugreifen kann.
die andere Möglichkeit, wie sie etwa bei 99% aller Java-Tätigkeiten eingesetzt wird:
Objekt als Parameter übergeben
wenn du
data.setName(name);
ausführst, dann übergibst du ja auch den Namen und speicherst ihn nicht irgendwo statisch
wenn die beiden Klassen/ Objekte, die das gemeinsame Data-Objekt brauchen,
nicht direkt interagieren, dann wird die Übergabe schwierig, das stimmt,
es ist durchaus denkbar, dann für grundlegende Programm-Daten statische Variablen zu verwenden,
aber machbar ist auch eine Übergabe
hmm... also ich habe die Klasse GUI und die Klasse Calc.
Beide müssen auf die Klasse Data zugreifen, d.h. beide Klassen rufen eben Methoden der Klasse Data auf.
bisher kenne ich eben es so dass ich in der Klasse GUI und Calc jeweils Data d = new Data() gemacht habe.. nun hatte ich das problem, dass ich ja 2 Objecte der Data hatte...
Will aber nur 1 Object haben.. sry habe die erklärungen oben nicht wirklich verstanden, könnte das jmd. nochmal erklären pls...
Schau dir mal in den FAQ das Singleton-Pattern an. Damit kannst du das lösen.
Deine Klasse Data müsste dann in etwa so aussehen:
Code:
public class Data()
{
private Data data = null;
private Data()
{
}
public static Data getInstance()
{
if(data == null)
{
data = new Data();
}
return data;
}
public void macheIrgendwas()
{
}
}
Zugriff auf die Methoden macheIrgendwas() erhälst du dann so:
Das Singleton-Pattern ist sehr weit verbreitet, auch im JDK. Ist kein Pfusch.
Static ist nicht immer schlecht. Was unten im Code fehlt (sehe ich gerade):
Das Klassenobjekt data muss auch als static definiert werden.
Was natürlich auch ginge, um das static zu vermeiden, wäre die Daten in der Klasse Data immer komplett zu serialisieren/deserialisieren, also schön in Dateien wegschreiben und wieder einlesen.
Kennt GUI Calc, oder kennt Calc GUI? Oder gibt es eine weitere (Controller-)Klasse, die die beiden anderen Klassen kennt? Wenn das so ist, dann reicht es doch, einmal ein Data-Objet zu erzeugen und das dem anderen Verwender z.B. im Konstruktor zu übergeben.
Wirklich notwendig dürfte der Singleton-Ansatz hier nicht sein. Und eine Serialsierung des Data-Objekts wäre wohl eine Lösung von hinten durch die Brust ins linke Auge...
Das Singleton-Pattern ist nun wirklich das letzte, was ich hier empfehlen würde. Wenn Objekte Zugriff auf andere, bereits existierende Objekte benötigen, dann übergibt man sie einfach im Konstruktor. Das Singleton-Pattern ist in 99% der Fälle unangebracht.
Das Singleton-Pattern ist nun wirklich das letzte, was ich hier empfehlen würde. Wenn Objekte Zugriff auf andere, bereits existierende Objekte benötigen, dann übergibt man sie einfach im Konstruktor. Das Singleton-Pattern ist in 99% der Fälle unangebracht.
Zustimmung. Das Pattern sollte man nur verwenden wenn man es wirklich braucht. Wenn in dem hier gebrachten Beispiel ein zweites Calc Objekt mit einer anderen Datenbasis (Data) benoetigt wird, steht man mit Singleton im Regen.