21.访问者模式
public abstract class Element
{
public abstract void Accept(IVistor vistor);
public abstract void Print();
}
public class ElementA : Element
{
public override void Accept(IVistor vistor)
{
vistor.Visit(this);
}
public override void Print()
{
Console.WriteLine("我是元素A");
}
}
public class ElementB : Element
{
public override void Accept(IVistor vistor)
{
vistor.Visit(this);
}
public override void Print()
{
Console.WriteLine("我是元素B");
}
}
public interface IVistor// 抽象访问者
{
void Visit(ElementA a);
void Visit(ElementB b);
}
public class ConcreteVistor : IVistor// 具体访问者
{
public void Visit(ElementA a)
{
a.Print();
}
public void Visit(ElementB b)
{
b.Print();
}
}
public class ObjectStructure// 对象结构
{
private ArrayList elements = new ArrayList();
public ArrayList Elements
{
get { return elements; }
}
public ObjectStructure()
{
Random ran = new Random();
for (int i = 0; i < 6; i++)
{
int ranNum = ran.Next(10);
if (ranNum > 5)
{
elements.Add(new ElementA());
}
else
{
elements.Add(new ElementB());
}
}
}
}
class Program
{
static void Main(string[] args)
{
ObjectStructure objectStructure = new ObjectStructure();
foreach (Element e in objectStructure.Elements)
{
e.Accept(new ConcreteVistor());// 每个元素接受访问者访问
}
Console.Read();
}
}