用C#实现Visitor模式

博客介绍了Visitor模式,它能在不改变对象元素类的前提下定义新操作。通过C#代码展示了该模式的应用,定义了Pet抽象类及其子类Cat和Dog,还有Visitor接口及实现类Visitor1、Visitor2等,可对Cat和Dog做不同操作且无需修改其类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值