前言:
访问者模式用于不同的元素有不同的访问者,不同的访问者对于访问不同的元素时要有不同的行为,如下:
public interface Element
{
void Accept(Visitor visitor);
}
public class Element1 : Element
{
public void Accept(Visitor visitor)
{
visitor.Visit(this);
}
}
public class Element2 : Element
{
public void Accept(Visitor visitor)
{
visitor.Visit(this);
}
}
public abstract class Visitor
{
public abstract void Visit(Element1 element1);
public abstract void Visit(Element2 element2);
}
public class Visitor1 : Visitor
{
public override void Visit(Element1 element1)
{
Console.WriteLine("我是元素1");
}
public override void Visit(Element2 element2)
{
Console.WriteLine("我是元素2");
}
}
public class ObjList
{
List<Element> list = new List<Element>();
public void AddElement(Element element)
{
list.Add(element);
}
public void RemoveElement(Element element)
{
list.Remove (element);
}
public void Accept(Visitor visitor)
{
foreach (var item in list )
{
((Element)item).Accept(visitor );//遍历访问所有元素
}
}
}
调用:
ObjList objList = new ObjList();
objList.AddElement(new Element1 ());
objList.AddElement(new Element2());
Visitor visitor = new Visitor1();
objList.Accept(visitor);
输出:
我是元素1
我是元素2