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.
Ich schreibe ein einfaches Zeichenprogramm. Man kann verschiedene Sachen einstellen (Farbe, Linienbreite, etc.), die dann in einem PaintModel gespeichert werden. Ein PaintModel wird einmal erzeugt und ist dann ein Member der Hauptklasse. Wenn nun beispielsweise ein JDialog mit JSpinner (der zur Auswahl der Linienbreite dient) aufgerufen wird, übergebe ich dem Dialog im Konstruktor eine Referenz auf das PaintModel, damit aus diesem die aktuelle Linienbreite ausgelesen werden kann und die neue hineingeschrieben werden kann. Ist das so günstig? Oder gibt es da ein DesignPattern für, das das eleganter löst?
Tut mir leid, aber mit objektorientiertem Design tue ich mich im Moment noch mehr als schwer.
Im ersten Schritt könntest dem jeweiligen Dialog ein entsprechendes Interface übergeben, dass nur die Methoden zur Verfügung stellt die der jeweilige Dialog braucht. Der Einfachheit halber, kann dein PaintModel ja im ersten Schritt alle diese Interfaces implementieren.
Vielleicht noch einen Satz zum Nutzten des ganzen. Wenn du später den Dialog in einer anderen Anwendung verwenden willst, musst doch nur eine Klasse ebenfalls das Interface implementieren lassen und schon klappt alles wie gewohnt.
Im ersten Schritt könntest dem jeweiligen Dialog ein entsprechendes Interface übergeben, dass nur die Methoden zur Verfügung stellt die der jeweilige Dialog braucht. Der Einfachheit halber, kann dein PaintModel ja im ersten Schritt alle diese Interfaces implementieren.
Falls ich das jetzt richtig verstanden habe, war da GANZ GROB sowas gemeint wie
Code:
interface ThicknessReceiver
{
void setThickness(float thickness);
}
class ThicknessDialog
{
public ThicknessDialog(final ThicknessReceiver thicknessReceiver)
{
final JSlider someSlider = ...
someSlider.addChangeListener(new ChangeListener()
{
public void valueChanged(ChangedEvent e)
{
thicknessReceiver.setThickness(someSlider.getValue());
}
}
}
}
Dann kann das PaintModel direkt ein ThciknessReceiver sein, und direkt an den Dialog übergeben werden
Code:
class PaintModel implements ThicknessReceiver
{
private float thickness;
public void setThickness(float thickness)
{
this.thickness = thickness;
}
}
class Main
{
private PaintModel paintModel = ...
void showThicknessDialog()
{
ThicknessDialog dialog = new ThicknessDialog(paintModel);
...
}
}
aber (und das ist der Vorteil) alternativ auch "irgendwas anderes" übergeben werden, was ein ThicknessReceiver ist. Ggf. dann auch nur eine anonyme innere Klasse
Code:
class PaintModel /*---- Implements nothing ----*/
{
private float thickness;
public void setThickness(float thickness)
{
this.thickness = thickness;
}
}
class Main
{
private PaintModel paintModel = ...
void showThicknessDialog()
{
ThicknessDialog dialog = new ThicknessDialog(new ThicknessReceiver()
{
public void setThickness(float thickness)
{
paintModel.setThickness(thickness);
}
});
...
}
}
...oder ein Controller, oder was ganz anderes.
Aber beachte: Das Beispiel wirkt schon sehr "gestelzt". Es macht vermutlich NICHT viel Sinn, "für jeden Scheiß" ein eigenes "ScheißReceiver" interface zu erstellen. Je nachdem, WAS dort alles eingestellt werden können soll, bzw. was im "PaintModel" alles drinsteht, könnte eine andere Lösung sinnvoller sein. Vielleicht kann man einige Dinge in einem interface "PenSettings" zusammenfassen und das dort verwenden. Wenn das PaintModel z.B. SELBST ein Interface ist, dann könnte man das auch direkt dem Dialog übergeben, oder man erstellt einen Controller, der das PaintModel enthält und an den Dialog übergeben wird, und der die Änderungen aus dem Dialog ans PaintModel weiterreicht, oder, oder, oder....
Solnge das projekt klein IST und BLEIBT ... Du solltest dir aber überlegen, wie du es machen würdest, wenn davon auszugehen wäre, dass das Projekt noch 5 Jahre läuft, 20 Leute dran arbeiten, und neue, unvorhergesehene Anforderungen gestellt werden.....
Solnge das projekt klein IST und BLEIBT ... Du solltest dir aber überlegen, wie du es machen würdest, wenn davon auszugehen wäre, dass das Projekt noch 5 Jahre läuft, 20 Leute dran arbeiten, und neue, unvorhergesehene Anforderungen gestellt werden.....
richtig. ich muss mich sowieso mal gründlicher mit sowas befassen, weil ich im moment noch nicht im traum von selbst auf solche ideen kommen würde... :roll: ich fürchte, ich muss mein denken noch komplett umstellen.