首页 > 代码库 > 访问者模式

访问者模式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

/*

访问者模式


*/

namespace App_MYCS.HDL_SJMS.FWZMS
{
class my_FWZMS
{
public void dy()
{
objStructure o = new objStructure();

o.Attach(new conElementa());
o.Attach(new conElementb());


ConVisitor1 cv1 = new ConVisitor1();
ConVisitor2 cv2 = new ConVisitor2();

o.Accept(cv1);
o.Accept(cv2);


}

}

abstract class Visitor
{
public abstract void Visitor1(conElementa a);

public abstract void Visitor2(conElementb b);
}

class ConVisitor1 : Visitor
{
public override void Visitor1(conElementa a)
{
Console.WriteLine("conElementa 被 ConVisitor1 访问 ");
}

public override void Visitor2(conElementb b)
{
Console.WriteLine("conElementb 被 ConVisitor1 访问 ");
}
}
class ConVisitor2 : Visitor
{
public override void Visitor1(conElementa a)
{
Console.WriteLine("conElementa 被 ConVisitor2 访问 ");
}

public override void Visitor2(conElementb b)
{
Console.WriteLine("conElementb 被 ConVisitor2 访问 ");
}
}


abstract class Element
{
public abstract void Accept(Visitor vi);
}

class conElementa : Element
{
public override void Accept(Visitor vi)
{
vi.Visitor1(this);
}

//其它相关方法
public void a()
{ }
}

class conElementb : Element
{
public override void Accept(Visitor vi)
{
vi.Visitor2(this);
}
//其它相关方法
public void b()
{
}
}


class objStructure
{
private List<Element> el = new List<Element>();

public void Attach(Element e)
{
el.Add(e);
}

public void Detach(Element e)
{
el.Remove(e);
}

public void Accept(Visitor v)
{
foreach (Element item in el)
{
item.Accept(v);
}
}

}
}

访问者模式