Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Referenz einer bereits instanziierten Klasse während des Programmablaufs
ich weiß nicht, ob ich gerade auf dem Schlauch stehe, aber ist es möglich von einer bereits instanziierten Klasse im späteren Programmablauf DIESE Referenz für eine andere Klasse zu bekommen?
Die andere Klasse befindet sich in einem anderem Paket.
(Wenn ich dich richtig verstanden habe)
Du hast ja die Instanz in eine Variable gespeichert. (Oder kannst es tun, falls nicht.)
Die kannst du theoretisch auch kreuz und quer durchs Programm feuern, per Konstruktor, Methoden oder sogar per public Variablen (nicht zu empfehlen).
Oder schau dir mal die Design Patterns in den FAQ an. Vor allem Observer, die Idee fasziniert mich, und sie löst die meisten Abhängigkeiten auf.
@ Fu3L:
Ich habe keine übergeordnete Klasse, die die Referenz speichert. (Wär eine Idee)
Und nein, die Klasse wovon ich die Referenz brauche instanziiert nicht die Klasse, wo ich die Referenz brauche.
Kann also leider kein "this" mitgeben.
@Volvagia:
Observer hab ich mir noch nicht angeschaut.
Aber ich bin gerade über Singletons gestolpert.
Ist dieses Erzeugungsmuster veraltet weil es durch static von überall drauf zugreifbar ist ?
Verrat uns doch mal ein bisschen mehr zu deinem bisherigen Design. Singletons KÖNNEN unter Umständen duchaus mal ganz praktisch sein, aber darüber streiten sich die Geister (such mal hier im Forum nach, gibt es einige sehr lange Diskussionen zu). Wenn du es anders lösen kannst würde ich das vorziehen - aber um dir da eine Lösung vorschlagen zu können müssten wir halt ein bisschen mehr wissen.
Wenn du nur die eine brauchst, kannst dus ruhig machen. Ist auch nicht so wichtig, was legal ist, viel wichtiger ist es, dass du damit auch klarkommst.
Ich habe eine GUI, auf welcher man Filmdaten eingeben kann.
Die Daten werden in einer HashMap gespeichert.
Da ich Probleme mit dem Konstruktor einer Ressourcen-Klasse habe, such ich eine andere Möglichkeit auf die Filmobjekte (welche ich Ausgeben möchte), zuzugreifen.
Nun bin ich soweit, dass ich die HashMap als Singleton implementiere und sowohl mit der GUI Klasse die Werte reinschreiben kann
als auch mit der Ressourcen-Klasse die Werte (bzw. das Objekt) auslesen kann.
Wenn du nur die eine brauchst, kannst dus ruhig machen. Ist auch nicht so wichtig, was legal ist, viel wichtiger ist es, dass du damit auch klarkommst.
Das ist aber genau eins der Probleme mit dem Singleton (Anti-)Pattern.
"Ich weiß nicht woher ich eine Innstanz der Klasse XYZ bekomme. *denk* *denk* *denk* - Ach egal, ich brauch die ja nur einmal also warum nicht mit nem Singleton. Dann bekomm ich bequem die Instanz von überall her."
Eh man sich versieht hat man in einem Projekt plötzlich 4 Singleton Klassen weils ja so schön bequem ist, anstatt sich mal in Ruhe Gedanken zu machen wie man es evtl besser machen könnte.
Ich habe eine GUI, auf welcher man Filmdaten eingeben kann.
Die Daten werden in einer HashMap gespeichert.
Da ich Probleme mit dem Konstruktor einer Ressourcen-Klasse habe, such ich eine andere Möglichkeit auf die Filmobjekte (welche ich Ausgeben möchte), zuzugreifen.
Nun bin ich soweit, dass ich die HashMap als Singleton implementiere und sowohl mit der GUI Klasse die Werte reinschreiben kann
als auch mit der Ressourcen-Klasse die Werte (bzw. das Objekt) auslesen kann.
Das klingt jetzt aber eher so nach einem Standard-MVC-Fall und dein Datenmodel als Singleton zu implementieren halte ich für eher schlecht. Nach welchen Prinzip hast du denn die Anwendung aufgebaut, kennst du MVC?
Das Problem ist, dass das Projekt bis morgen fertig sein muss.
MVC sagt mir was, ja.
Aber da habe ich zu wenig Erfahrung damit, um das "mal eben so" umzubauen.
Wie gesagt. Die Zeit sitzt mir bissel im Nacken (nein, ich habe nicht erst heute morgen damit angefangen)
Der Stand ist im Moment so, wie 2 Beiträge weiter drüber beschrieben.
Daraus muss ich jetzt irgendwas machen und fertig werden.
Wenn die HashMap als Singleton zu implementieren ganz schlecht ist, dann bräuchte ich aber eine Alternative die ich
1) heute noch umsetzen kann.
und 2) mein Ziel erfüllt. Sprich, ich muss in der Ressource-Klasse das Filmobjekt haben, welches beim Hinzufügen des Filmes, instanziiert wird.
Diese Art von Singleton ist sehr schlecht, aber wenn du keine Alternativen kennst/kannst, bleibt dir nix anderes übrig, nimm ein Singleton, und erstarre in Scham wenn du daran denkst oder dich jemand darauf anspricht.
Wenn die HashMap als Singleton zu implementieren ganz schlecht ist, dann bräuchte ich aber eine Alternative die ich
1) heute noch umsetzen kann.
und 2) mein Ziel erfüllt. Sprich, ich muss in der Ressource-Klasse das Filmobjekt haben, welches beim Hinzufügen des Filmes, instanziiert wird.
Um dein Ziel zu erfüllen kannst du es so machen. Viele Wege führen nach Rom. Design Fehlentscheidungen rächen sich in der Regel erst viel viel später. Wenn du mal etwas erweitern willst, systematisch Testen, Refactorn usw. Wenn dir das alles egal ist nur um fertig zu werden ist das natürlich eine Lösung - die du irgendwann mal bitter bereuen wirst.