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.
ich suche ein Beispiel für das Besuchermuster. Bei google hab ich leider nichts ordentliches gefunden und das Beispiel im Buch "Entwurfsmuster" von E.Gamma hab ich nicht verstanden. Also wenn jemand was für mich hat, wäre ich sehr dankbar.
und du willst prüfen, ob die gewisse bedingungen erfüllt
wie machst du das, so dass der Code möglichst entkoppelt ist, darum gehts nämlich??
=> du lässt einen visitor eine person besuchen, das Pattern selbst ist reichlich trivial: beim Besuch bekommt der Besucher einfach this übergeben
Code:
// in person (das ist übrigens immer so:)
public accept(Personenvisitor v){
v.visit(this); // immer das gleiche, der visitor bekommt "mich"
}
// der Personenvisitor
public boolean isGueltig;
public visit(Person p){
// irgendein code, der Prüft ob p gültig ist
}
// Verwendung
Person p = ...// irgendwoher
PersonenVisitor validator = new Validator();
p.accept(validator);
if(validator.isGueltig){
}else
{
}
Super, das hilft mir schon sehr viel weiter.
Worum es bei dem Pattern so wirklich geht war mir nämlich auch noch nicht klar.
Also vielen Dank für die schnelle Antwort.
Ich habe eine Klasse "Fassade" die den Besucher akzeptieren soll.
Daher habe ich mir eine Klasse "Besucher" gebastelt.
In diese habe ich folgendes reingeschrieben:
Code:
public class Besucher {
public boolean isGueltig ;
public boolean visit(Fassade f){
return true;
}
}
Da soll natürlich noch mehr rein.
So, in Fassade habe ich dann reingeschrieben:
Code:
public void accept(Besucher v){
v.visit(this);
}
Verstehe ich das richtig, dass ich von Fassade dann immer neue Instanzen mache?
Zur Erläuterung: Ich will in der Fassade einen Baum traversieren; wenn bestimmte Kriterien während der Traversion erkannt werden, dann soll der Besucher kommen und etwas mit dem Teilbaum machen.
Ist der Ansatz so richtig oder läuft da etwas falsch???
du brauchst natürlich mindestens eine, damit der Besucher was zu besuchen hat...
Zur Erläuterung: Ich will in der Fassade einen Baum traversieren; wenn bestimmte Kriterien während der Traversion erkannt werden, dann soll der Besucher kommen und etwas mit dem Teilbaum machen.
nicht so gut, du kannst / sollst den Besucher ja nicht "einladen", sondern der Besuch muss von aussen angestossen werden
würde in deinem Fall die visit so schreiben, dass der Besucher auch gleich alle Kindknoten visited (und so rekursiv durch den Baum wandert) und wenn "bestimmte Kriterien erkannt werden" die weitere Verarbeitung dann vom Besucher ausgelöstwird
würde in deinem Fall die visit so schreiben, dass der Besucher auch gleich alle Kindknoten visited (und so rekursiv durch den Baum wandert) und wenn "bestimmte Kriterien erkannt werden" die weitere Verarbeitung dann vom Besucher ausgelöstwird
Genau das ist der Plan, die Rekursion ist schon da
Code:
public static void iterateChildren(Node n) {
//machIrgendwasMitNode(n);
//System.out.println(n.getNodeName());
//Testbedingungen festlegen
NodeList list = n.getChildNodes();
for(int i = 0; i < list.getLength(); i++) {
Node child = list.item(i);
//hier soll der Besucher was mit dem Knoten machen!
iterateChildren(child);
}
}