hi,
ausgehend von diesem Thread (Singleton-Diskussion) und von folgenden Codeschnipsel von Marco13 aus diesem Thread:
wollte ich meine Blamage mit dem Singleton für den Datenzugriff mal in Griff bekommen ^^
folgende grobe Idee:
DataStorageT beinhaltet dabei die zu bearbeitenden Daten (Liste von Personendaten).
MyConcreteListener müsste nun die jeweilige GUI-Komponenten beinhalten (MyConcreteListener sei hier stellvertretend für mehrere Klassen zu betrachten).
Ist die Variante so einigermaßen gut gewählt? Im Prinzip will ich bei Änderung der Daten durch eine Komponente (sei es durch Menü oder Buttons, oder Änderungen in einer Tabelle, welche ausschlaggebend für ComboBox-Inhalt sein könnte) die anderen Komponenten updaten (Listen, Tabelle, ComboBoxen, was auch immer ich da reinbaue).
2. Hätte ich nun die Möglichkeit die Listener-Implementierung auf 2 arten von Komponenten zu nutzen.
Zum einen könnte ich jede erdenkliche Komponente als Listener implementieren, und somit nur die Events bearbeiten die für die Komponente nötig sind (was ich aber als Overhead ansehe, da bei jedem Event alle Komponenten prüfen würden ob das Event sie betrifft).
Andere Variante: Ich benutze ein CardPanel, welches ich alleinig auf dem MainFrame platziere. Innerhalb dieses CardPanels wird immer nur ein Panel (quasi eine Card) angezeigt, welches dann alle nötigen Komponenten enthält, die ich zu diesem Zeitpunkt sehen möchte. Ein Wechsel der Ansicht bedarf dann nur noch dem Wechsel des zu sehenden Panels auf dem CardPanel. Ich könnte diese Cards als Listener implementieren, sodass diese bei einem Event prüfen welcher Art dieses ist, und entsprechende Komponenten informieren. Somit hab ich das Eventhandling zentral in der Card-Klasse liegen, was die ganze Sache aufblähen könnte, aber es existiert kein Overhead mehr wie im 1. Fall, da nun nur noch die Komponenten angesprochen/aktualisiert werden, für welches das Event bestimmt ist.
Vielleicht n bissel konfus, aber 2. Variante is mir zwecks des Overheads die Bessere.
Wenn noch was unklar ist, einfach melden ;D
EDIT: ob nun (angelehnt an 2. variante) nur die Listener das Interface kennen sei ma eben dahingestellt, ändern kann man die Datenstruktur ja auch von nem Menü, welches ja nichts zu aktualisieren braucht
ausgehend von diesem Thread (Singleton-Diskussion) und von folgenden Codeschnipsel von Marco13 aus diesem Thread:
Code:
class DataModelEvent
{
...
}
interface DataModelListener
{
void dataAdded(DataModelEvent event);
}
public class DataModel {
private List<DataModelListener> dataModelListeners = ...
// add/remove-Methoden für DataModelListeners
public void addData(String name, int age)
{
....
fireDataAddedEvent(....);
}
private void fireDataAddedEvent(....)
{
DataModelEvent dataModelEvent = new DataModelEvent(....);
for (DataModelListener dataModelListener : dataModelListeners)
{
dataModelListener.dataAdded(dataModelEvent);
}
}
}
class DataModelView implements DataModelListener
{
public void dataAdded(DataModelEvent event)
{
schreibDenKramInEineJListOderSonstwohin();
}
}
wollte ich meine Blamage mit dem Singleton für den Datenzugriff mal in Griff bekommen ^^
folgende grobe Idee:
DataStorageT beinhaltet dabei die zu bearbeitenden Daten (Liste von Personendaten).
MyConcreteListener müsste nun die jeweilige GUI-Komponenten beinhalten (MyConcreteListener sei hier stellvertretend für mehrere Klassen zu betrachten).
Ist die Variante so einigermaßen gut gewählt? Im Prinzip will ich bei Änderung der Daten durch eine Komponente (sei es durch Menü oder Buttons, oder Änderungen in einer Tabelle, welche ausschlaggebend für ComboBox-Inhalt sein könnte) die anderen Komponenten updaten (Listen, Tabelle, ComboBoxen, was auch immer ich da reinbaue).
2. Hätte ich nun die Möglichkeit die Listener-Implementierung auf 2 arten von Komponenten zu nutzen.
Zum einen könnte ich jede erdenkliche Komponente als Listener implementieren, und somit nur die Events bearbeiten die für die Komponente nötig sind (was ich aber als Overhead ansehe, da bei jedem Event alle Komponenten prüfen würden ob das Event sie betrifft).
Andere Variante: Ich benutze ein CardPanel, welches ich alleinig auf dem MainFrame platziere. Innerhalb dieses CardPanels wird immer nur ein Panel (quasi eine Card) angezeigt, welches dann alle nötigen Komponenten enthält, die ich zu diesem Zeitpunkt sehen möchte. Ein Wechsel der Ansicht bedarf dann nur noch dem Wechsel des zu sehenden Panels auf dem CardPanel. Ich könnte diese Cards als Listener implementieren, sodass diese bei einem Event prüfen welcher Art dieses ist, und entsprechende Komponenten informieren. Somit hab ich das Eventhandling zentral in der Card-Klasse liegen, was die ganze Sache aufblähen könnte, aber es existiert kein Overhead mehr wie im 1. Fall, da nun nur noch die Komponenten angesprochen/aktualisiert werden, für welches das Event bestimmt ist.
Vielleicht n bissel konfus, aber 2. Variante is mir zwecks des Overheads die Bessere.
Wenn noch was unklar ist, einfach melden ;D
EDIT: ob nun (angelehnt an 2. variante) nur die Listener das Interface kennen sei ma eben dahingestellt, ändern kann man die Datenstruktur ja auch von nem Menü, welches ja nichts zu aktualisieren braucht