Welches Programmdesign?

Status
Nicht offen für weitere Antworten.

ayrton89

Mitglied
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.
 

WieselAc

Top Contributor
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.
 

ayrton89

Mitglied
WieselAc hat gesagt.:
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.
kannst du das vielleicht mal kurz an einem beispiel erklären? ich steig da noch nicht so ganz durch. ???:L
 

Marco13

Top Contributor
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....
 

ayrton89

Mitglied
danke. wie du schon sagtest, ist das wohl etwas übertrieben für so ein kleines projekt. deswegen lasse ich es zunächst so, wie es ist.
 

Marco13

Top Contributor
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.....
 

ayrton89

Mitglied
Marco13 hat gesagt.:
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.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
S Programm entwickeln, welches ein Dreieckspuzzle lösen kann Allgemeine Java-Themen 5
Z Welches GUI Framework für Java ist aktuell? Allgemeine Java-Themen 16
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
perlenfischer1984 Welches Design Pattern ist geegneit. Allgemeine Java-Themen 7
U Welches ist das richtige Entwurfsmuster Allgemeine Java-Themen 2
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
F Welches Design Pattern? Allgemeine Java-Themen 3
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
P "Komplexe" Datenbankabfragen, welches ist der bessere Weg Allgemeine Java-Themen 4
A Welches Speichermanagement für einen Kalkulator Allgemeine Java-Themen 7
T Welches Tuturial soll ich paralell lesen ? Allgemeine Java-Themen 3
R Welches User-Verzeichnis wählen für Configurationsdateien - Windows Allgemeine Java-Themen 2
G Gleiche Packages in verschiedenen JAR Dateien - Welches Package wird verwendet? Allgemeine Java-Themen 5
E Welches Dateiformat für gespeicherte Einstellungen? Allgemeine Java-Themen 20
N Servlet welches PDF erzeugt Allgemeine Java-Themen 10
A Erkennen welches Fenster bei windowDeactivated aktiviert wird? Allgemeine Java-Themen 2
ruutaiokwu welches design pattern? frage an die oo-experten unter euch... Allgemeine Java-Themen 3
ARadauer Welches Programm hört auf Port? Allgemeine Java-Themen 3
P Textfiles laden - egal welches Encoding Allgemeine Java-Themen 9
N Welches design pattern? Allgemeine Java-Themen 8
André Uhres Welches Werzkeug benutzt ihr um eure Mails zu lesen? Allgemeine Java-Themen 47
D Welches Pattern kann ich nutzen? Allgemeine Java-Themen 9
F welches array ist im jedem programm? Allgemeine Java-Themen 6
Z Testen welches BS benutzt wird Allgemeine Java-Themen 3
T Welches Webframew0rk für pure Java? Allgemeine Java-Themen 13
M Welches Linux zum Java testen? Allgemeine Java-Themen 5
D Welches Fenster ist im moment aktiv? Allgemeine Java-Themen 11
K Welches Betriebssystem ist in Benutzung? Allgemeine Java-Themen 11
M Welches Objekt ruft die Methode auf? Allgemeine Java-Themen 12
S Welches Verschlüsselungsverfahren Allgemeine Java-Themen 9
G Welches Java GUI Buch würdet Ihr empfehlen Allgemeine Java-Themen 2
W VersionsVerwaltung welches Tool Verwendet ihr Allgemeine Java-Themen 12
D Welches Linux in Verb. mit Java Allgemeine Java-Themen 9
S Welches LookAndFeel ist das? Allgemeine Java-Themen 2
Chucky Java Buch - nur welches? online oder kaufbuch? Allgemeine Java-Themen 18
P Welches JRE braucht meine Applikation? Allgemeine Java-Themen 3
W welches layout? Allgemeine Java-Themen 3
G Polymorphie Programmdesign Frage Allgemeine Java-Themen 20

Ähnliche Java Themen

Neue Themen


Oben