Visitor模式:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
public abstract class Pet
{
abstract public void Accept(Visitor v);
}
public class Cat:Pet
{
private string state="";
public Cat(string state)
{
this.state=state;
}
public string State
{
get{return state;}
}
public override void Accept(Visitor v)
{
v.VisitCat(this);
}
}
public class Dog:Pet
{
private string state="";
public Dog(string state)
{
this.state=state;
}
public string State
{
get{return state;}
}
public override void Accept(Visitor v)
{
v.VisitDog(this);
}
}
public interface Visitor
{
void VisitCat(Cat c);
void VisitDog(Dog d);
}
public class Visitor1:Visitor
{
public void VisitCat(Cat c)
{
if(c.State=="感冒")
{
Console.Write("小猫患感冒了!");
}
}
public void VisitDog(Dog d)
{
if(d.State=="流行感冒")
{
Console.Write("小狗患流行感冒了!");
}
}
}
public class Visitor2:Visitor
{
public void VisitCat(Cat c)
{
if(c.State=="消化不良")
{
Console.Write("小猫消化不良!");
}
}
public void VisitDog(Dog d)
{
if(d.State=="胃痛")
{
Console.Write("小狗胃痛!");
}
}
}
public class Test_Visitor
{
public void Test()
{
Cat c=new Cat("感冒");
Dog d=new Dog("胃痛");
Visitor1 v1=new Visitor1();
c.Accept(v1);
d.Accept(v1);
Visitor2 v2=new Visitor2();
c.Accept(v2);
d.Accept(v2);
}
}
以后还可以定义Visitor3等等,对Cat和Dog做不同的操作,但是不用修改Cat和Dog