访问者模式设计详解

访问者模式是一种行为设计模式,它允许为对象结构添加新的操作,而不需要修改对象结构本身。这种模式在编译器实现中非常常见,但在日常开发中使用较少。

访问者模式的应用场景

当遇到以下情况时,可以考虑使用访问者模式:

  • 拥有一个类层次结构,需要执行多种不同的操作。
  • 对象结构定义的类很少变化,但需要在对象结构上定义新的操作。

C#中的实现示例

以下是如何在C#中实现访问者模式的示例代码

#region 访问者接口 public interface IVisitor { void Visit(Element element); } #endregion #region 具体访问者 public class VisitorConcreteA : IVisitor { public void Visit(Element element) { Console.WriteLine($"{this.GetType().Name} Visited {element.GetType().Name}"); } } public class VisitorConcreteB : IVisitor { public void Visit(Element element) { Console.WriteLine($"{this.GetType().Name} Visited {element.GetType().Name}"); } } #endregion #region 元素接口 public interface IElement { void Accept(IVisitor visitor); } public abstract class Element : IElement { public void Accept(IVisitor visitor) { visitor.Visit(this); } } #endregion #region 具体元素 public class ElementConcreteA : Element { // 实现具体逻辑 } public class ElementConcreteB : Element { // 实现具体逻辑 } #endregion #region 对象结构 public class ObjectStructure { private List _elements; public ObjectStructure() { _elements = new List(); } public void AttachElement(Element element) { _elements.Add(element); } public void DetachElement(Element element) { _elements.Remove(element); } public void Accept(IVisitor visitor) { foreach (Element element in _elements) { element.Accept(visitor); } } } #endregion

使用示例

// 构建结构 ObjectStructure structure = new ObjectStructure(); structure.AttachElement(new ElementConcreteA()); structure.AttachElement(new ElementConcreteB()); // 创建访问者对象 VisitorConcreteA visitorA = new VisitorConcreteA(); VisitorConcreteB visitorB = new VisitorConcreteB(); // 结构接受访问者 structure.Accept(visitorA); structure.Accept(visitorB); Console.Read();
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485