Design einer GUI-Anwendung



  • Angenommen Ihr entwickelt eine GUI Anwendung mit einem Hauptfenster (class MainFrame), welches mehrere GUI Teile, wie z.B. Dialoge (class Dialog1 usw.) enthält. Diese Teile sollen alle auf die eigentlichen Daten (class Model) der Anwendung Zugriff haben. Wie lösst Ihr den einheitlichen Zugriff?

    1. Alles statisch im Model als eine Art globale Vars/Methoden halten und dann in den GUI Teilen per Model.var1 bzw. Model::var1 o.ä. zugreifen.

    2. Im MainFrame (oder wo anders) ein Model-Objekt erzeugen und eine Referenz auf diese an die einzelnen GUI Teile weiterreichen (z.B. im Konstruktor)

    3. Alle GUI Elemente erben vom Model, so dass keine Referenzen beötigt werden (wahrscheinlich pfui, wegen Zwang zu Mehrfachvererbung bei Fenster-Klassen u.a. Problemen)

    4. Ein Design Pattern wie z.B. MVC originalgetreu verwenden. (Wahrscheinlich das Beste, aber ich verstehe nicht so ganz, welche praktischen Vorteile es z.B. ggü. Lösung 2) bringt und was die Trennung zum Controller nochmal bringt)

    5. Ganz anders...



  • Ich nehme Methode 2.



  • 2 mit Singleton ist wohl das gaengigste.



  • Ich nehm globales Singleton ohne 2 (ich hasse es, Objekte stupide durchzureichen).



  • Badestrand schrieb:

    Ich nehm globales Singleton ohne 2 (ich hasse es, Objekte stupide durchzureichen).

    weiterreichen ist ja dank singleton nicht mehr notwendig... haette ich vielleicht dazuschreiben sollen.



  • Shade Of Mine schrieb:

    Badestrand schrieb:

    Ich nehm globales Singleton ohne 2 (ich hasse es, Objekte stupide durchzureichen).

    weiterreichen ist ja dank singleton nicht mehr notwendig... haette ich vielleicht dazuschreiben sollen.

    Na dann hat's aber nicht mehr viel von der 2 :p



  • Meint Ihr das mit dem Singleton in etwa so? (Bitte bei Bedarf Code ergänzen/korrigieren)

    class Model{
    
      private static Model instance = null;
      private String var1 = null; // usw.
    
      private Model (){ // init }
    
      public static Model getInstance(){ 
        if(instance == null)
          instance = new Model();
        return instance;
      }
    
      // Getter und Setter ...
      public getVar1(){ return var1; }; // usw.
    
    }
    
    class MainFrame extends JFrame{ // so auch bei Dialogen u.a.
      Model model = Model.getInstance();
    
      // ...dort wos gebraucht wird
      model.getVar1();
    
    }
    }
    

    Vorteile sind klar mit dem globalen Zugriff. Welche Nachteile gibts bei der praktischen Anwendung?



  • Hab eben mal bei http://de.wikipedia.org/wiki/Singleton_(Entwurfsmuster)#Implementierung_in_Java geschaut.
    Also evtl. bei getInstance noch synchronized hinzugügen oder das initialization on demand holder idiom verwenden.



  • hansile schrieb:

    Hab eben mal bei http://de.wikipedia.org/wiki/Singleton_(Entwurfsmuster)#Implementierung_in_Java geschaut.
    Also evtl. bei getInstance noch synchronized hinzugügen oder das initialization on demand holder idiom verwenden.

    normales double checking in getInstance verwenden?

    if(instance == null) { synchronized { if(instance==null) instance=create(); }}
    

Anmelden zum Antworten