Eigene Factory Klasse

moessi91

Bekanntes Mitglied
Hey ich habe hier das Problem dass ich mir mit einer Factory klasse immer neue Objecte liefere und diese dann in ein array adde, dabei hat sich aber das problem aufgetan dass irgendwie auch die daten im array geändert werden. hoffe um rat. Wenn ich es normal erzeuge gehts.
Hier mal die Methode wo ich das Array fülle:
Java:
verbindung = getConnection(info);
		
		Statement sqlAnw = verbindung.createStatement();
		ArrayList<Supplier> array = new ArrayList<Supplier>();
		ResultSet rs = sqlAnw.executeQuery("SELECT suppliers.*, places.ort " +
				"FROM suppliers, places " +
				"WHERE places.plz = suppliers.plz " +
				"ORDER BY suppliers.name ASC");
		
		Supplier lieferant;
		System.out.println("getAllSuppliers--------------------------------------------");
while(rs.next())
		{
			
//			lieferant = new Supplier();
			lieferant = ClassFactory.getSupplier();
			System.out.println("Nach ClassFactory: "+lieferant.toString());
			
			lieferant.setName(rs.getString("name"));
			lieferant.setId(rs.getString("idlieferant"));
			lieferant.setPlz(rs.getInt("plz"));
			lieferant.setWohnort(rs.getString("ort"));
			lieferant.setAdresse(rs.getString("adresse"));
			lieferant.setHausnummer(rs.getString("hausnummer"));
			
			System.out.println("Nach Befüllen: "+lieferant.toString());
			
			array.add(lieferant);
			
			for(int i = 0; i < array.size(); i++)
				System.out.println("Nach dem hinzufügen zum array: "+array.get(i).toString());
		}
Hier noch die Factory methode
Java:
/*Returns a Supplier or Creates a new One if doesent alreadyd Exist*/
	public static Supplier getSupplier()
	{
//Bis zum Ende des Arrays nach der OID suchen und dann zurückgegeben wenn es nicht gefunden wird, ein neues erzeugen zurückgeben und dem Array 
//hinzufügen
		for(int i=0; i < ObjectArray.size();i++)
			if(ObjectArray.get(i).OID==OIDS.SULPPLIER)
				return (Supplier) ObjectArray.get(i);

		return (Supplier) createSupplier();
	}
dazu noch die createSupplier() methode:
Java:
public static Supplier createSupplier()
	{
		Supplier s = new Supplier();
		ObjectArray.add(s);
		return s;
	}
Hier noch das Object array und die klassen:
Java:
//Array: 
static ArrayList<StateOIDs> ObjectArray = new ArrayList<StateOIDs>();
//Supplier Klasse:
public class Supplier extends StateOIDs
{
	String id;
	String name;
	String adresse;
	String wohnort;
	String hausnummer;
	int plz;
	
	public Supplier()
	{
		OID = OIDS.SULPPLIER;
		state = Conditions.ILLEGAL;
	}
	
	public Supplier(String id, String name, String adresse, String hausnummer,
			int plz) 
	{
		super();
		this.id = id;
		this.name = name;
		this.adresse = adresse;
		this.hausnummer = hausnummer;
		this.plz = plz;
	}
//Getter und Setter
.
.
.
.
//State OIDS klasse:
public class StateOIDs 
{
	protected int state;
	protected int OID;
}

Danke schonmal :)
 
Zuletzt bearbeitet:

Andi_CH

Top Contributor
Was ist "array" genau für ein Typ?

Hm, jedes mal wenn du etwas hinzufügst ändert sich der array, aber das hast du sicher nicht gemeint... was heisst "dass irgendwie auch die daten im array geändert werden."?

Wer ändert Daten? Warum ist das ein Problem?
 

moessi91

Bekanntes Mitglied
Habe jetzt einfach die ganze klasse rein gespeichert und hier noch die ausgabe von dem ganzen:
Rot markiert wo das ist was ich nicht verstehe.

Mit der Factory erzeugt:
getAllSuppliers--------------------------------------------
Nach ClassFactory: Supplier
[adresse=Jägerweg, hausnummer=13, id=3430Brauerei, name=Brauerei, plz=4702, wohnort=Wallern]
Nach Befüllen: Supplier
[adresse=ABC straße, hausnummer=1, id=3592Baushaus, name=Baushaus, plz=4600, wohnort=Wels]

Hier steht noch das richtige drinnen:
Nach dem hinzufügen zum array: Supplier
[adresse=ABC straße, hausnummer=1, id=3592Baushaus, name=Baushaus, plz=4600, wohnort=Wels]

Nach ClassFactory: Supplier
[adresse=ABC straße, hausnummer=1, id=3592Baushaus, name=Baushaus, plz=4600, wohnort=Wels]
Nach Befüllen: Supplier
[adresse=Jägerweg, hausnummer=13, id=3430Brauerei, name=Brauerei, plz=4702, wohnort=Wallern]

Hier ist jetzt auf einmal alles von der Brauerei also dem 2. element obwohl ich vorher noch das alte hinzugefügt habe.
Nach dem hinzufügen zum array: Supplier
[adresse=Jägerweg, hausnummer=13, id=3430Brauerei, name=Brauerei, plz=4702, wohnort=Wallern]
Nach dem hinzufügen zum array: Supplier
[adresse=Jägerweg, hausnummer=13, id=3430Brauerei, name=Brauerei, plz=4702, wohnort=Wallern]

Supplier
[adresse=Jägerweg, hausnummer=13, id=3430Brauerei, name=Brauerei, plz=4702, wohnort=Wallern]
Supplier
[adresse=Jägerweg, hausnummer=13, id=3430Brauerei, name=Brauerei, plz=4702, wohnort=Wallern]
END: getAllSuppliers----------------------------------------

Normal erzeugt geht alles:
getAllSuppliers--------------------------------------------
Nach ClassFactory: Supplier
[adresse=null, hausnummer=null, id=null, name=null, plz=0, wohnort=null]
Nach Befüllen: Supplier
[adresse=ABC straße, hausnummer=1, id=3592Baushaus, name=Baushaus, plz=4600, wohnort=Wels]
Nach dem hinzufügen zum array: Supplier
[adresse=ABC straße, hausnummer=1, id=3592Baushaus, name=Baushaus, plz=4600, wohnort=Wels]
Nach ClassFactory: Supplier
[adresse=null, hausnummer=null, id=null, name=null, plz=0, wohnort=null]
Nach Befüllen: Supplier
[adresse=Jägerweg, hausnummer=13, id=3430Brauerei, name=Brauerei, plz=4702, wohnort=Wallern]
Nach dem hinzufügen zum array: Supplier
[adresse=ABC straße, hausnummer=1, id=3592Baushaus, name=Baushaus, plz=4600, wohnort=Wels]
Nach dem hinzufügen zum array: Supplier
[adresse=Jägerweg, hausnummer=13, id=3430Brauerei, name=Brauerei, plz=4702, wohnort=Wallern]
Supplier
[adresse=ABC straße, hausnummer=1, id=3592Baushaus, name=Baushaus, plz=4600, wohnort=Wels]
Supplier
[adresse=Jägerweg, hausnummer=13, id=3430Brauerei, name=Brauerei, plz=4702, wohnort=Wallern]
END: getAllSuppliers----------------------------------------------------------
 

Andi_CH

Top Contributor
Wer ändert Daten?
Warum ist das überhaupt ein Problem?

Sind immer noch meine Fragen. Der output oben ist für mich zu unübersichtlich

(Kleine Randbemerkung: Variablennamen bitte klein Schreiben -> ObjectArray)
 

moessi91

Bekanntes Mitglied
Die erste Methode holt daten aus der Datenbank und schreibt diese in das Object Array,
in der Schleife
while(rs.next)
wird von der Factory der Supplier geholt überschrieben und dann dem Array hinzugefügt
Mann sieht in der ausgabe, (rot) dass beim ersten eintragen das richtige drinnen steht und sobald das 2. object hinzugefügt wird wird irgendwie das 1. auch geändert.
 

moessi91

Bekanntes Mitglied
bezwecken soll das ganze, dass die Daten aus der Datenbank object für object in das array gespeichert werden sollen welches zurückgegeben wird und dann in eine tabelle kommt.
 

Andi_CH

Top Contributor
Das Folgende ist eine Vermutung:

Wenn dir die Factory immer dieselbe Referenz liefert, wird auf allen Positionen deiner Liste auch dieselbe abgelegt.
Das heisst alle Felder referenzieren ein und dasselbe Objekt.

(was steckt genau hinter lieferant = ClassFactory.getSupplier();?)

Wenn du die Daten darin änderst ist klar was passiert...

Gibt doch mal die Hashcodes aller in der Liste referenzierten Objekte aus - wenn im Objekt drin toString nicht überschrieben ist, einfach mit system.out.println(...) und sonst halt mit system.out.println((Object)...)

Wenn die alle gleich sind ist der Fall klar.
 

Michael...

Top Contributor
Was solle diese ArrayList und diese for-Schleife in getSupplier() ?

Die hashCodes sind übrigens gleich weil es sich bei allen um dasselbe Objekt handelt.
In der getSupplier() gibst Du ja immer dasselbe Objekt zurück, änderst dessen Werte und packst die Referenz darauf in Dein array.
 

moessi91

Bekanntes Mitglied
Ja wir haben in der Schule den Auftrag bekommen unser Programm so umzuändern, dass nicht immer neue Objekte erzeugt werden mit new Supplier z.B. sondern es sollen Factory Klassen verwendet werden um Resourcen zu schonen.
Da wir aber so einen Wunderbaren Lehrer (Professor soll man solche Lehrer nicht nennen) haben der uns absolut nichts erkährt sondern nur sagt: "Schauts im Internet" hat niemand bei uns eine Ahnung wie wir das Lösen sollen und ich hatte hier den ersten Versuch gestartet aber es hat nicht so geklappt. Darum wollte ich hier fragen wie man das vl lösen könnte.

lg
 

Michael...

Top Contributor
Was will man da an Resourcen schonen? Verschiedene Supplier benötigen nun mal Ihr eigenens Objekt.
Schmeiss die ArrayList raus und schon hast Du ein kleines bisschen Resource geschont ;-)
 

Andi_CH

Top Contributor
Ja wir haben in der Schule den Auftrag bekommen unser Programm so umzuändern, dass nicht immer neue Objekte erzeugt werden mit new Supplier z.B. sondern es sollen Factory Klassen verwendet werden um Resourcen zu schonen.
Da wir aber so einen Wunderbaren Lehrer (Professor soll man solche Lehrer nicht nennen) haben der uns absolut nichts erkährt sondern nur sagt: "Schauts im Internet" hat niemand bei uns eine Ahnung wie wir das Lösen sollen und ich hatte hier den ersten Versuch gestartet aber es hat nicht so geklappt. Darum wollte ich hier fragen wie man das vl lösen könnte.

lg

Dann sag der lieben Schule sie seien Idio.... :autsch: Aua - äh sie hätten dir etwas nicht ganz richtig vermittelt

Stelle dir vor - alle Referenzen zeigen auf EIN Objekt dessen Inhalt du änderst - was geschieht da wohl?

Objekte mit anderem Inhalt MUSST du mit new erzeugen. Nur wenn an zwei Stellen ein Objekt mit demselben Inhalt liegt wie schon in einem anderen Objekt vorhanden ist, kannst du dieselbe Referenz eintragen.


Hm - ein hinkendes Beispiel ;)
(ja es gibt hunderte bessere Lösungen das zu realisieren - es ist nur ein Beispiel - also bitte nicht "verbessern" :D )

Du hast eine liste1 die Objekte enthält - die Liste sei nach der id sortiert
Weil das sortieren extrem lange braucht (Gedankenexperiment! :) ) machst du eine liste2 die nach der plz sortiert sein soll.

Es macht nun keinen Sinn für die liste2 neue Objekte zu generieren. Da können dieselben wie in liste1 verwendet werden.
Da macht es sogar Sinn - wenn nämlich die Strasse oder Hausnummer ändert muss das auch nur in einem Objekt geändert werden.
 

Andi_CH

Top Contributor
Ja aber der Lehrer will unbedingt dass wir factories verwenden weil er sichs einbildet...

Hm - der Factory müsstest du alle Daten die die Identität des Objektes ausmachen übergegen. Vermutlich reicht im konkreten Fall die id.

Du musst die get-Funktion um einen Parameter (id) erweitern.
In der Factory würde ich persönlich eine HashMap mit der id als key machen.
Die get Methode prüft erst ob es schon ein Objekt mit der ID gibt und gibt dir die Referenz auf dieses.
Wenn es noch keines gibt, wird ein neues generiert, gespeichert und die Referenz darauf zurückgegeben.

Für die ID darf es keine set Methode geben - die darf nur über den Konstruktor gesetzt werden können, sonst kannst du das ganz System ziemlich durcheinander bringen.

Poste doch mal die ganze Factory
 

moessi91

Bekanntes Mitglied
Java:
if((ObjectArray.get(i).OID==OIDS.SULPPLIER) && 
					((ObjectArray.get(i).getState() == Conditions.ILLEGAL)||(ObjectArray.get(i).getState()==Conditions.ERASED)))

habs jetzt mit dieser wunderbaren if abfrage gelöst... die erzeugt in der Factory neue objecte wenn keine zum überschreiben vorhanden sind.
Danke für die Hilfe und Unterstützung gegen die Lehrkraft ^^ :applaus: :toll:
Leider kann ich ihm nicht sagen dass er ein Idiot ist lohnt sich auch nicht dagegen zu reden was er sagt weil dann kann man sich seinen 5er gleich selber eintragen.
 

Andi_CH

Top Contributor
Aehm dieser code gehört aber in die Factory!
Die Factory muss das erledigen, sonst ist es eben keine Factory!

und bitte: schreib ObjectArray klein
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Eigene Datenstruktur um eine Menge zu speichern Allgemeine Java-Themen 3
_user_q Was brauche ich, um eine eigene "Search for updates"-Funktion einzubauen? Allgemeine Java-Themen 1
pizza_dox_9999 Wie füge ich eine "eigene" ScriptEngine dem ScriptEngineManager? Allgemeine Java-Themen 3
E Input/Output Eigene Datei mit java öffnen Allgemeine Java-Themen 9
missy72 Klassen Eigene Klasse MessageWindow ähnlich der Alert Klasse Allgemeine Java-Themen 2
J Eigene Api erstellen und dann auch verwenden - Ordnerstruktur Allgemeine Java-Themen 1
RalleYTN Eigene ScriptEngine? Allgemeine Java-Themen 14
L Eigene Dependency Injections definieren? Allgemeine Java-Themen 4
K Eigene API erstellen? Allgemeine Java-Themen 13
T Best Practice Eigene GUI programmieren | MouseMotion Detection Allgemeine Java-Themen 3
M Eigene forEach()-Methode funktioniert nicht. Allgemeine Java-Themen 2
J eigene Java Bibliothek Allgemeine Java-Themen 2
M Output einer anderen/externen .jar in eigene JTextArea Allgemeine Java-Themen 4
B Klassen Eigene Klasse als Array benutzen Allgemeine Java-Themen 3
D Eigene/r Collection/Container Allgemeine Java-Themen 3
F Eigene .jar mit anderer .jar öffnen Allgemeine Java-Themen 7
X Eigene Annotation - mit Bedingung für ganze Klassen oder Methoden Allgemeine Java-Themen 2
H Best Practice Ideensuche: Flexibel hinzufügbare eigene Parser Allgemeine Java-Themen 6
T OOP Die eigene Bruchklasse Allgemeine Java-Themen 11
P Eigene Exception Klasse Allgemeine Java-Themen 7
J Java - Eigene DLL importieren Allgemeine Java-Themen 25
B JTable eigene Daten Add Methode Allgemeine Java-Themen 2
S OOP Problembereichsmodell: Bestehende Framework Klasse in eigene Klassenstruktur einbinden Allgemeine Java-Themen 9
E Eigene Exception Klasse erstellen Allgemeine Java-Themen 3
S Methoden Eigene Klasse als Rückgabewert Allgemeine Java-Themen 6
S eigene regEx schreiben Allgemeine Java-Themen 4
O Collections Eigene Methodenzusicherung bei Collections als Parameter Allgemeine Java-Themen 2
M Eigene Klasse verschlüsselt in Datei speichern Allgemeine Java-Themen 13
N Geodaten für eigene Routenplanung Allgemeine Java-Themen 5
M Problem beim schreiben einer eigene generische Klasse Hashtable Allgemeine Java-Themen 11
C Eigene Sounddateien schreiben Allgemeine Java-Themen 12
M Problem beim schreiben einer eigene generische Klasse LinkedList Allgemeine Java-Themen 34
M Best Practices Exception Handling für eigene library Allgemeine Java-Themen 8
M eigene Klasse durch Composition mit java.io.File erweitern Allgemeine Java-Themen 3
S eigene Update Funktion Allgemeine Java-Themen 5
H2SO3- getMethods(): eigene methoden rausfinden Allgemeine Java-Themen 4
C eine eigene Javadoc erstelen Allgemeine Java-Themen 3
Kr0e Eigene RMI Implementierung Allgemeine Java-Themen 3
S Eigene Bibliothek Allgemeine Java-Themen 2
M Eigene Dateiendung? Allgemeine Java-Themen 3
M Plugins für eigene Programme Allgemeine Java-Themen 3
S Eigene Events feuern Allgemeine Java-Themen 3
S Instanz in einer Klasse erstellen, und dem Konstruktor die eigene Klasse mitgeben Allgemeine Java-Themen 4
A Eigene Java Plugins entwickeln - wie optimal? Allgemeine Java-Themen 14
R Eigene ArrayList vom Typ Short, Integer oder Double Allgemeine Java-Themen 4
U Eigene "Dining Philosopher" Interpretation weckt Philos nie auf Allgemeine Java-Themen 2
0x7F800000 Wovon eigene Events für spezialisierte JComponents ableiten? Allgemeine Java-Themen 2
SuperSeppel13 Packete der Java Bibliothek ins eigene Prjekt integrieren Allgemeine Java-Themen 4
P Eigene Klasse kopieren die auf sich selbst refferenziert Allgemeine Java-Themen 8
G Umgebungsvariabeln auslesen (Path, Temp, oder eigene) Allgemeine Java-Themen 2
T Eigene PID ermitteln! Allgemeine Java-Themen 3
D Icon für eigene Dateiendung Allgemeine Java-Themen 7
G Eigene "Speicherverwaltung" Allgemeine Java-Themen 5
H eigene Annotations Allgemeine Java-Themen 2
S eigene Klasse die JButton extended - als Liste! Allgemeine Java-Themen 6
D Performance: ArrayList vs. Array vs. "Eigene Liste&quot Allgemeine Java-Themen 8
A Eigene Wrapper-Klassen Allgemeine Java-Themen 2
J Kann eigene Klasse nicht ermitteln Allgemeine Java-Themen 4
M Wann verwendet man PropertyChangedEvents, wann eigene? Allgemeine Java-Themen 3
J OpenOffice.org Events in eigene Anwendung umleiten Allgemeine Java-Themen 4
U eigene Datenstruktur ArrayList<String> nach Object [][ Allgemeine Java-Themen 2
N Observer/Observable der JAVA-API od. eigene Implementierung Allgemeine Java-Themen 2
B eigene Klassen verkaufen Allgemeine Java-Themen 2
W eigene event-Klasse, event posten Allgemeine Java-Themen 2
reibi Eigene exception mit feld "serialVersionUID" Allgemeine Java-Themen 3
M Eigene .jar in anderes Programm importieren[eclipse] Allgemeine Java-Themen 6
T Eigene Libary Allgemeine Java-Themen 6
E Eigene Exception Allgemeine Java-Themen 11
Q Bibliotheken mit ins eigene Jar aufnehmen Allgemeine Java-Themen 4
M Eigene Exception Klasse Allgemeine Java-Themen 4
M eigene Objekte vergleichen Allgemeine Java-Themen 6
K log4j - eigene Info-Ausgaben Allgemeine Java-Themen 5
G Performance JDOM - DOM - eigene HashMap (SAX) Allgemeine Java-Themen 2
G JWindow verschieben bei mousedragged auf eigene titelleiste Allgemeine Java-Themen 3
N Methoden in eigene Dateien auslagern? Allgemeine Java-Themen 10
B Eigene Datentypen Allgemeine Java-Themen 5
G Brauche hilfe bei JMF: Wie eigene Streaming Data Source! Allgemeine Java-Themen 4
G eigene klassen die ein jar verwenden als neues jar erstellen Allgemeine Java-Themen 4
O Externe Jars in eigene JAr packen in Eclipse Allgemeine Java-Themen 5
R Updateprozedur ü. Internet fürs eigene Programm? Allgemeine Java-Themen 24
G eigene uhrzeit in einer java applikation führen Allgemeine Java-Themen 19
R Eigene Konfigurationsdatei für größere Projekte. Allgemeine Java-Themen 4
J Eigene Callback Methode? Allgemeine Java-Themen 3
S eigene evetns erstellen Allgemeine Java-Themen 5
K eigene GUI Komponente wird nicht angezeigt Allgemeine Java-Themen 3
D Eigene Classes aus anderen .java-Dateien Allgemeine Java-Themen 2
G Eigene PrintService Implementierung. Allgemeine Java-Themen 5
C Die Konsole ins eigene Programm einbauen Allgemeine Java-Themen 5
Meeresgott Best Practice "Spezifisches" Factory Pattern ? Allgemeine Java-Themen 1
K Factory Pattern: Mit Generics umgehen Allgemeine Java-Themen 6
Meeresgott OOP Factory Muster ausbauen Allgemeine Java-Themen 34
M Wo hin mit static factory methods? Allgemeine Java-Themen 40
M Factory Allgemeine Java-Themen 14
T Klassen Fabrik (Factory) zur Laufzeit erweitern Allgemeine Java-Themen 5
Luk10 Factory auf meine Situaion anwendbar? Allgemeine Java-Themen 14
T So eine Art Singleton-Factory? Allgemeine Java-Themen 3
S Designproblem: Factory organisieren Allgemeine Java-Themen 4
EagleEye erstellen ein factory Allgemeine Java-Themen 13
M Methodenübersicht einer Klasse einsehen Allgemeine Java-Themen 14
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben