ฉันมีลำดับชั้นของชั้นเรียนที่แสดงถึงการควบคุม GUI บางสิ่งเช่นนี้
Control->ContainerControl->Form
ฉันต้องใช้ชุดของ algoritms ที่ทำงานกับวัตถุที่ทำสิ่งต่าง ๆ และฉันคิดว่ารูปแบบของผู้เข้าชมจะเป็นวิธีที่สะอาดที่สุด ลองยกตัวอย่างเช่นอัลกอริทึมที่สร้าง Xml Representaion ของลำดับชั้นของวัตถุ ใช้วิธี 'คลาสสิค' ฉันจะทำสิ่งนี้:
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 ได้อย่างไร
เหตุผลที่ฉันพิจารณารูปแบบของผู้เยี่ยมชมคืออัลกอริธึมบางอย่างจะต้องมีการอ้างอิงที่ไม่มีในโครงการที่มีการใช้คลาสและมีอัลกอริทึมที่แตกต่างกันจำนวนหนึ่งดังนั้นฉันจึงหลีกเลี่ยงคลาสที่มีขนาดใหญ่