Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Kompositum Muster ohne Exception oder instanceof Operator
wollt mal Fragen ob es vielleicht eine "bessere" Möglichkeit gibt ein Composite Muster zu implementieren als mit UnsupportedOperationExceptions oder instanceof Operator zu arbeiten?
Ich nehme mal an, der TE meint den Fall, wenn Du die Composite-spezifischen Methoden (getChildren, addChild, ...) nicht in der Oberklasse / Schnittstelle definierst.
Ja genau entweder ich defniere eine abstrakte Klasse Komponente welche sowohl die Kompositum Methoden als auch die Blatt Methoden enthält (und jededs mal eine UnsupportedOperationException werf in der abstrakten Klasse). Oder aber ich erstelle ein Interface welches Methoden definiert welche sowohl ein Blatt als auch ein Kompositum verwenden kann. Und dazu noch vererbte Interfaces, eins für die BlattMethoden und eins für die Kompositum Methoden.
Ich habe zwar schon von dem Visitor Muster gehöhrt, dennoch ist mir sein Aufbau und seine Verwendung in meinem Problem noch unklar. Könntest du das etwas genauer beschreiben? Ich geb auch noch ein paar Infos.
Bisher sieht meine abstrakte Klasse Komponente in etwa so aus:
Code:
public abstract class Komponente
{
//Bsp einer Kompositum Methode
public void add(Komponente komponente) {
throw new UnsupportedOperationException();
}
//Bsp einer Blatt Methode
public double getXKoordinate() {
throw new UnsupportedOperationException();
}
}
Das Kompositum überschreibt die Kompositum Methoden und das Blatt überschreibt die Blatt Methoden. Blätter und Kompusita überschreiben beide die Methode iterator(). Das Blatt gibt jediglich einen NullIterator zurück der gar nichts macht und die Kompusita geben einen Iterator zurück welcher alle untergeordneten Kompusita und Blätter rekursiv durchläuft. Der Iterator des root Elements läuft also die ganze Baumstruktur durch. Soweit so gut, doch wenn der Client den Iterator durchläuft bekommt er Komposita und Blätter mit dem Iterator. Das kann natürlich dazu führen dass er Methoden aufruft welche eine UnsupportedOperationException() zurückwirft.
Ich habe zwar schon von dem Visitor Muster gehöhrt, dennoch ist mir sein Aufbau und seine Verwendung in meinem Problem noch unklar. Könntest du das etwas genauer beschreiben? Ich geb auch noch ein paar Infos.
Das Visitor Pattern tritt eigentlich fast immer mit dem Composite Muster auf und umgekehrt.
Ein bisschen Googlen schadet nicht, bevor hier dasselbe nochmal falsch wiedergegeben wird.