GUI 컨트롤을 나타내는 클래스 계층이 있습니다. 이 같은:
Control->ContainerControl->Form
다양한 작업을 수행하는 객체에서 작동하는 일련의 알고리즘을 구현해야하며 방문자 패턴이 가장 깨끗한 솔루션이라고 생각합니다. 객체 계층의 Xml 표현을 만드는 알고리즘을 예로 들어 보겠습니다. '클래식'접근법을 사용하면 다음과 같이 할 수 있습니다.
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;
}
}
그러나 방문자 패턴 으로이 작업을 수행하는 방법을 잘 모르겠습니다. 이것이 기본 구현입니다.
public class ToXmlVisitor : IVisitor
{
public void Visit(Form form)
{
}
}
추상 클래스조차도 구현에 도움이되므로 ToXmlVisitor에서 올바르게 수행하는 방법을 모르겠습니까?
방문자 패턴을 고려하는 이유는 일부 알고리즘에는 클래스가 구현되는 프로젝트에서 사용할 수없는 참조가 필요하고 많은 다른 알고리즘이 있으므로 큰 클래스를 피하기 때문입니다.