Hallo, ich bin habe da so ein Problem, dass ich gerne möglichst elegant lösen würde.
Also, ich habe mir ein Interface mit Namen Observable geschrieben. Dieses soll von den Klassen implementiert werden, die observable (nach dem Observer-Pattern) sein sollen. Dies bedeutet, das das Interface die Methoden addObserver(), notifyObservers() und removeObservers() beinhalten muss.
Zudem wäre es ja nun auch schön, wenn ein Vektor in diesem Interface existiert, so dass alle implementierenden Klassen einen eigenen Vektor zu Verfügung stehen haben.
Da dieser Vektor später die Observer der Klasse beherbergen soll, wäre es günstig, wenn er nicht von außen veränderbar ist. Private variablen sind jedoch in Interfaces nicht gestattet und wenn der Vektor als final definiert wird, besitzen alle implementierenden Klassen den selben Vektor. Was wiederum zu dem Effekt führt, dass wenn die Klassen der Objekte A, B das Interface implementieren. Ein anderes Objekt C sich als Observer bei A registriert, dieses Objekt C auch Observer bei B wird. Dieser Effekt ist nicht gewünscht! Kommen wir zurück zur Problematik. Also ist es nicht möglich einen Vektor in der Interfaceklasse zu definieren. Und es muss ein Vektor der Observer beinhalten soll in jeder Klasse vorhanden sein, die das Observable implementiert. Nun, aktuell implementieren im meinem Code 23 Klassen dieses Interface. Daher ist selbst das anlegen eines Vektors redundanter Code, geschweige denn vom implementieren der jeweiligen Schnittstellen.
Eine weitere Möglichkeit ein Observable zu implementieren ist es das Observable nicht als Interfaceklasse sondern als Abstrakte Basisklasse zu gestalten. Doch hier gibt es das Problem mit der Multivererbung. In Java ist es nicht gestattet von mehreren Klassen zu erben. Daher kann z.b. Eine Klasse nicht gleichzeitig von Thread und von Observable erben, obwohl sowol die Fähigkeiten des Threads als auch die der Observableklasse benötigt werden.
Nun stellt sich mir die Frage, wie kann es realisiert werden, dass meine Wünsche befriedigt werden, und dennoch die Funktionalität vollständig vorhanden ist?
Vielen Dank
Also, ich habe mir ein Interface mit Namen Observable geschrieben. Dieses soll von den Klassen implementiert werden, die observable (nach dem Observer-Pattern) sein sollen. Dies bedeutet, das das Interface die Methoden addObserver(), notifyObservers() und removeObservers() beinhalten muss.
Zudem wäre es ja nun auch schön, wenn ein Vektor in diesem Interface existiert, so dass alle implementierenden Klassen einen eigenen Vektor zu Verfügung stehen haben.
Da dieser Vektor später die Observer der Klasse beherbergen soll, wäre es günstig, wenn er nicht von außen veränderbar ist. Private variablen sind jedoch in Interfaces nicht gestattet und wenn der Vektor als final definiert wird, besitzen alle implementierenden Klassen den selben Vektor. Was wiederum zu dem Effekt führt, dass wenn die Klassen der Objekte A, B das Interface implementieren. Ein anderes Objekt C sich als Observer bei A registriert, dieses Objekt C auch Observer bei B wird. Dieser Effekt ist nicht gewünscht! Kommen wir zurück zur Problematik. Also ist es nicht möglich einen Vektor in der Interfaceklasse zu definieren. Und es muss ein Vektor der Observer beinhalten soll in jeder Klasse vorhanden sein, die das Observable implementiert. Nun, aktuell implementieren im meinem Code 23 Klassen dieses Interface. Daher ist selbst das anlegen eines Vektors redundanter Code, geschweige denn vom implementieren der jeweiligen Schnittstellen.
Eine weitere Möglichkeit ein Observable zu implementieren ist es das Observable nicht als Interfaceklasse sondern als Abstrakte Basisklasse zu gestalten. Doch hier gibt es das Problem mit der Multivererbung. In Java ist es nicht gestattet von mehreren Klassen zu erben. Daher kann z.b. Eine Klasse nicht gleichzeitig von Thread und von Observable erben, obwohl sowol die Fähigkeiten des Threads als auch die der Observableklasse benötigt werden.
Nun stellt sich mir die Frage, wie kann es realisiert werden, dass meine Wünsche befriedigt werden, und dennoch die Funktionalität vollständig vorhanden ist?
Vielen Dank