在像Java这样的语言中,您可以使用访问者模式模拟模式匹配行为.
您可以通过以下步骤执行此操作:
>使用accept方法定义一个表示Animal的接口
>向Animal添加一些子类,并提供相同的实现,如下面的小例子中所示.
>定义接口Visitor并为其提供实现.这个classe将允许您模拟类上的一些模式匹配.
这里有一个小例子:
public interface Animal {
public void accept(AnimalVisitor v);
}
public class Dog extends Animal {
public void accept(AnimalVisitor v) {
v.visit(this);
}
}
public class Cat extends Animal {
public void accdept(AnimalVistior v) {
v.visit(this);
}
}
public interface AnimalVisitor {
public void visit(Dog d);
public void visit(Cat c);
}
public class PrintAnimal implements AnimalVisitor {
public void visit(Dog d) {
System.out.println("Dog");
}
public void visit(Cat c) {
System.out.println("Cat");
}
}
访问者模式是解决问题的一种优雅方式,也可以避免在一个函数中积累if(x实例的bar).使用此模式,您的代码将更易读,更容易扩展.
相应的Scala代码可以让我了解我的答案:
abstract class Animal {}
case class Dog() extends Animal
case class Cat() extends Animal
object Animal {
def printAnimal(a : Animal) = a match {
case x : Dog => "Dog"
case x : Cat => "Cat"
case _ => "Unknown"
}
def main(args : Array[String]) = {
println(printAnimal(Dog()))
}
}