mrjerk: Design Problem in Java Projekt

Beitrag lesen

Hallo,

Das gefällt mir allerdings nicht so. SIeht ziemlich nach SPaghetticode aus
wenn ich da ständig Referenzen übergeben muss. Stellt euch vor es kommen
weitere Klassen hinzu, die Methoden aus anderen Klassen ausführen müssen.

Das mit den Referenzen fände ich gar nicht so schlimm. Allerdings muss auf diese Weise Dein Menu den Container kennen, in dem es eingebunden ist. Dadurch erzeugst Du eine Abhängigkeit vom Menu zu seinem Container (es sollte nach meinem Verständnis eher umgekehrt sein, sprich, der Container ist zwar abhängig von seinem Menu, aber das Menu nicht abhängig vom Container).

Habt ihr gute Ideen?
Gibt es da nützliche Design Patterns??

Mir fiele das [http://en.wikipedia.org/wiki/Observer_pattern@title=Observer-Pattern] dazu ein:

  • Du implementierst ein Interface für Klassen, die mit dem ausgewählten File etwas tun müssen
      (IFileSelectionObserver.java o.ä.)
  • Dieses Interface stellt eine Methode bereit, die ausgeführt wird, um einen Observer über ein ausgewähltes File zu informieren ( z.b. "void notify(File f)" oder so)
  • Deine ImageTable implementiert dieses Interface und folglich auch die notify methode:
  
public class ImageTable implements IFileSelectionObserver {  
   public void notify (File f) {  
      this.showImage(f);  
   }  
   public void showImage(File f) {  
      ...  
   }  
}  

  • Deine Menubar bekommt eine Methode, um FileSelectionObserver zu registrieren:
  
public class MenuBar {  
   private ArrayList<IFileSelectionObserver> observers = new ArrayList<IFileSelectionObserver> ();  
  
   public void registerObserver (IFileSelectionObserver observer) {  
      this.observers.add(observer);  
   }  
}  

An geeigneter Stelle kann nun Deine Menubar alle Observer informieren:

  
File selectedFile = ... // TODO  
for (IFileSelectionObserver observer : this.observers) {  
    observer.notify(selectedFile);  
}  

Hope that helps,

Jörg