- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace ConsoleApplication1
- {
- abstract class Element
- {
- public abstract void Accept(Visitor v);
- }
- class Elem1 : Element
- {
- public override void Accept(Visitor v)
- {
- v.VisitElem1(this);
- }
- }
- class Elem2 : Element
- {
- public override void Accept(Visitor v)
- {
- v.VisitElem2(this);
- }
- }
- abstract class Visitor
- {
- public abstract void VisitElem1(Elem1 e1);
- public abstract void VisitElem2(Elem2 e2);
- }
- class Visitor1 : Visitor
- {
- public override void VisitElem1(Elem1 e1)
- {
- Console.WriteLine(this.GetType().Name + " " + e1.GetType().Name);
- }
- public override void VisitElem2(Elem2 e2)
- {
- Console.WriteLine(this.GetType().Name + " " + e2.GetType().Name);
- }
- }
- class Visitor2 : Visitor
- {
- public override void VisitElem1(Elem1 e1)
- {
- Console.WriteLine(this.GetType().Name + " " + e1.GetType().Name);
- }
- public override void VisitElem2(Elem2 e2)
- {
- Console.WriteLine(this.GetType().Name + " " + e2.GetType().Name);
- }
- }
- class ObjStructure
- {
- private List<Element> elems = new List<Element>();
- public void add(Element e)
- {
- elems.Add(e);
- }
- public void visit(Visitor v)
- {
- foreach (Element e in elems)
- {
- e.Accept(v);
- }
- }
- }
- class Client
- {
- public static void Main()
- {
- ObjStructure o = new ObjStructure();
- o.add(new Elem1());
- o.add(new Elem2());
- o.visit(new Visitor1());
- o.visit(new Visitor2());
- Console.Read();
- }
- }
- }
本文介绍了一种使用C#实现的设计模式——访客模式。通过定义一个访问者类的方法来处理一组元素对象,实现了对不同类型的元素进行操作。文中通过具体的代码示例展示了如何创建抽象的元素和访问者类,以及它们的具体实现。

被折叠的 条评论
为什么被折叠?



