OOP Architektur Problem

andreT

Aktives Mitglied
Hallo,

ich habe aktuell ein kleines Problem bei dem ich einen Tipp/Rat benötige.
Es geht um eine kleine API für Desktopanwendungen die aktuell immer nur eine Anwendung "verarbeiten" kann. D.h. es ist immer nur eine Anwendung gestartet und alle geöffneten Fenster gehören dieser einen Anwendung.
Damit sich die Fenster untereinander nicht kennen müssen, sich aber relativ zueinander positionieren können, wurde einst folgender Code/Mechanismus gebaut :
Der aktuelle Code sieht (stark vereinfacht!) so aus :

KLASSE MyJFrame
Code:
import javax.swing.JFrame;
public class MyJFrame extends JFrame {

	/*
	 * Konstruktor 01
	 * Konstruktor 02
	 * Konstruktor 03
	 * ...
	 */
	
	/**
	 * Überschrieben damit Fenster immer (zueinander) zentriert werden! 
	 */
	public void setVisible(boolean visible) {
		if(visible) {
			MyWindowManager.setActiveWindow(this);
		}
		
		super.setVisible(visible);
	}
}

KLASSE MyJDialog
Code:
import javax.swing.JDialog;
public class MyJDialog extends JDialog {

	/*
	 * Konstruktor 01
	 * Konstruktor 02
	 * Konstruktor 03
	 * ...
	 */
	
	/**
	 * Überschrieben damit Fenster immer (zueinander) zentriert werden! 
	 */
	public void setVisible(boolean visible) {
		if(visible) {
			MyWindowManager.setActiveWindow(this);
		}
		
		super.setVisible(visible);
	}
}

KLASSE MyWindowManager
Code:
import java.awt.Window;
public class MyWindowManager {
	private static Window activeWindow = null;
	
	/**
	 * Liefert das aktive Fenster! 
	 */
	public static Window getActiveWindow() {
		return activeWindow;
	}

	/**
	 * Kann Fenster (zueinander) zentrieren! 
	 */
	public static void setActiveWindow(Window window) {
		// Fenster (zueinander) zentrieren!
		window.setLocationRelativeTo(getActiveWindow());
		// Fenster aktiv setzen!
		activeWindow = window;
	}
}

Nun soll die API weiterentwickelt werden damit mehrere Anwendungen bzw. Plugins parallel gestartet werden können. Diese Plugins haben natürlich jeweils eigene Dialoge!
Das Problem : Der statische Zugriff auf MyWindowManager ist so ja nun nicht mehr möglich weil dort ja nicht zwischen den Anwendungen getrennt wird. Es kann dann also passieren das ein Fenster von Plugin2 plötzlich über/relativ zu einem Fenster von Plugin1 positioniert wird o.ä..
Was nun also tun?

Mein erster Ansatz war daß ich nun sowas wie einen PluginKontext halte der das Plugin ja eindeutig identifizieren kann. Problem hierbei ist nur das dieser Kontext ja dann überall hin durchgereicht werden muss, damit auch noch in der "hintersten anonymen Klasse" auch ein Fenster gestartet werden kann!.

Ich suche nun nach einer eleganten/cleveren/gängigen Möglichkeit dieses "Problem" möglichst komfortabel zu beheben. Gibt es für sowas nicht vllt. auch ein "Pattern" o.ä.. Eigentlich müsste sowas ja ein "gängiges" Problem sein, oder?

Hat jemand einen Tipp/Rat und/oder Erfahrung mit solch einem Problem?

Gruß
andre


--------------------

edit : Nur kleinere Compile-Fehler behoben ;)
 
Zuletzt bearbeitet:
S

SlaterB

Gast
> nur das dieser Kontext ja dann überall hin durchgereicht werden muss
das ist in der Tat ein allgemeines Problem, führt z.B. zu
Dependency Injection ? Wikipedia

mein Zusatz ist aber auch immer, dass man das gar nicht so an die große Glocke hängen muss,
ja, jede Klasse muss was an andere weiterreichen, aber so ist das Leben,
verwende für alles, z.B. Listener, möglichst Basisklassen, verstecke Initialisierungen in allgemeinen Methoden,
dann fällt das letzlich gar nicht mehr richtig auf

> damit auch noch in der "hintersten anonymen Klasse" auch ein Fenster gestartet werden kann!.

schreibe z.B.
Java:
addListener(button, new MyAction() {
   public void action() {
      getContext().xy();
   }
});
mit einer Methode addListener(), die das add() ausführt und gleichzeitig noch den übergebenen Listener initalisiert,
so fällt es im Code kaum weiter auf, das init kann aber nicht vergessen werden, falls man nicht zum normalen add() übergeht,

nebenbei kann man noch das nervige actionPerformed(ActionEven) von ActionListener in eine einfachere Methode ummodeln,
kann ein try/catch Exception mit Logging drumherum setzen, vielleicht mit MyRunAction automatisch einen Thread starten usw.,
Basisklassen sind mächtige Sache
 

Gregorrr

Bekanntes Mitglied
In Android ist jede Komponente, die mit der App oder Android an sich interagieren möchte (außer reine Modell-Klassen) von einem
Code:
Context
abgeleitet, bzw. einem
Code:
ContextWrapper
, der eine
Code:
getApplicationContext()
vorschreibt. Man muss auch bei jeder zweiten Methode einen Kontext übergeben, wenn man bestimmte Komponenten benutzen will. Dieser
Code:
getApplicationContext()
ist in einer ABC implementiert und wird wie schon gesagt von jedem "Plugin" abgleitet.
 

andreT

Aktives Mitglied
Schon merkwürdig daß man sich schon erleichtert fühlt wenn man liest das etablierte Systeme solche "Probleme" ähnlich "trivial" lösen mussten :D

Der Hinweis mit dem getContext().yx() setzt dem ganzen letztlich Krone auf!
Die Tatsache das JEDES Plugin eine abstrakte Klaase zum Starten überschreiben muss und diese dann garantiert auch nur einmal gestartet werden kann, bietet natürlich die komfortable Möglichkeit einer statischen getContext()-Methode an dieser. Und schon brauch man auch nichts mehr durchreichen. Der Kontext kann dann ja auch noch xy() usw. :toll:
So werd ich es bauen.

Danke für die Antworten!
Gruß
andre
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L30nS Erste Schritte Multiplayer-Kartenspiel in der MVC-Architektur realisieren Allgemeine Java-Themen 1
temi Fragen zur Software-Architektur Allgemeine Java-Themen 123
O Architektur für Software Allgemeine Java-Themen 14
D Wie realisiert Ihr die Dreischicht-Architektur? Allgemeine Java-Themen 13
C MVC-Architektur Allgemeine Java-Themen 5
schlingel Plugin-Architektur - Welche nehmen? Allgemeine Java-Themen 6
J Model View Controller Architektur Allgemeine Java-Themen 6
eskimo328 Architektur, Fachliche oder Technische Trennung Allgemeine Java-Themen 18
U Sichtbarkeit von Klassen und gute Architektur Allgemeine Java-Themen 5
G Package / Architektur Allgemeine Java-Themen 11
N Argumente für Plugin-Architektur Allgemeine Java-Themen 5
G Buch zur Komponentenentwicklun und SW-Architektur Allgemeine Java-Themen 3
egrath Info über VM Architektur Allgemeine Java-Themen 2
S Mögliche Architektur für ein System Allgemeine Java-Themen 7
J Frage zu Thread-Architektur Allgemeine Java-Themen 2
A Anwendungs-Design (Plugin-Architektur) Allgemeine Java-Themen 4
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
A Java modul Problem Allgemeine Java-Themen 4
D Read JSON File Problem Allgemeine Java-Themen 9
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
P Selenium . getText Problem Allgemeine Java-Themen 9
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Thread.sleep Problem Allgemeine Java-Themen 2
A Problem bei der Nachbarschafttest Allgemeine Java-Themen 11
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
N Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
T PIM basierend auf netbeans via AnyDesk Problem Allgemeine Java-Themen 3
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
Kirby.exe Verständnis Problem bei Rucksack Problem Allgemeine Java-Themen 6
B Eclipse-Lombok-Problem Allgemeine Java-Themen 19
I Input/Output ObjectOutputStream - Problem Allgemeine Java-Themen 7
1 Multiple Choice Knapsack- Problem Allgemeine Java-Themen 2
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2
A Array Problem Allgemeine Java-Themen 8
bueseb84 Problem Allgemeine Java-Themen 0
S Problem mit Arrays Allgemeine Java-Themen 1
D Nullpointer Exception Problem Allgemeine Java-Themen 5
B Problem mit meinen Klassen Allgemeine Java-Themen 6
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
J Problem beim Umstellen auf Java jdk 13 Allgemeine Java-Themen 3
J Problem bei Install java 13 Allgemeine Java-Themen 3
X Profitable Reise Problem Allgemeine Java-Themen 32
A Problem beim öffnen von Java-Installern Allgemeine Java-Themen 1
Dann07 Problem mit JavaMail API Allgemeine Java-Themen 26
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
J Clear-Problem Allgemeine Java-Themen 10
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
S JFileChooser Problem Allgemeine Java-Themen 4
M Traveling Salesman - MST Heuristik Problem Allgemeine Java-Themen 4
J Traveling Salesman Problem Allgemeine Java-Themen 14
E Java Editor Problem mit 2er Exceptions Allgemeine Java-Themen 12
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
S Methoden Problem mit NullPointerException Allgemeine Java-Themen 9
Javafan02 Problem mit if-clause Allgemeine Java-Themen 17
J Lombok Problem mit Konstruktoren bei Verberbung Allgemeine Java-Themen 1
kodela Event Handling Problem mit der Alt-Taste Allgemeine Java-Themen 16
W Threads Problem Allgemeine Java-Themen 15
D (Verständnis-)Problem mit Unterklasse Allgemeine Java-Themen 4
S Problem mit Generic bei unmodifiableCollection Allgemeine Java-Themen 4
S jserialcomm Problem Allgemeine Java-Themen 1
Flynn Thread-Problem... Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
G Problem beim GUI Allgemeine Java-Themen 9
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12
S Java OpenOffice Problem mit Windows-Benutzerwechsel Allgemeine Java-Themen 19
K Threads RAM Problem Allgemeine Java-Themen 20
P Operatoren Problem mit Zähler in recursiver Schleife Allgemeine Java-Themen 2
C Int Problem Allgemeine Java-Themen 8
C J2V8 NodeJs Java Bride Problem und Frage!?!? Allgemeine Java-Themen 1
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
C Webseiten Programm problem Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben