Ich habe eine Hierarchie von Klassen, die GUI-Steuerelemente darstellt. Etwas wie das:
Control->ContainerControl->Form
Ich muss eine Reihe von Algorithmen implementieren, die mit Objekten arbeiten, die verschiedene Aufgaben ausführen, und ich denke, dass das Besuchermuster die sauberste Lösung wäre. Nehmen wir zum Beispiel einen Algorithmus, der eine XML-Darstellung einer Hierarchie von Objekten erzeugt. Unter Verwendung des klassischen Ansatzes würde ich dies tun:
public abstract class Control
{
public virtual XmlElement ToXML(XmlDocument document)
{
XmlElement xml = document.CreateElement(this.GetType().Name);
// Create element, fill it with attributes declared with control
return xml;
}
}
public abstract class ContainerControl : Control
{
public override XmlElement ToXML(XmlDocument document)
{
XmlElement xml = base.ToXML(document);
// Use forech to fill XmlElement with child XmlElements
return xml;
}
}
public class Form : ContainerControl
{
public override XmlElement ToXML(XmlDocument document)
{
XmlElement xml = base.ToXML(document);
// Fill remaining elements declared in Form class
return xml;
}
}
Aber ich bin mir nicht sicher, wie ich das mit dem Besuchermuster machen soll. Dies ist die grundlegende Implementierung:
public class ToXmlVisitor : IVisitor
{
public void Visit(Form form)
{
}
}
Da auch die abstrakten Klassen bei der Implementierung helfen, bin ich mir nicht sicher, wie ich das in ToXmlVisitor richtig machen soll?
Der Grund, warum ich das Besuchermuster in Betracht ziehe, ist, dass einige Algorithmen Referenzen benötigen, die in Projekten, in denen die Klassen implementiert sind, nicht verfügbar sind, und dass es eine Reihe verschiedener Algorithmen gibt, sodass ich große Klassen vermeide.