gpt4 book ai didi

java - 一些具有访问者模式的非常通用的代码

转载 作者:行者123 更新时间:2023-11-30 07:29:36 24 4
gpt4 key购买 nike

我今天在做一些关于访问者模式的作业,我做了一个看起来有点像这样的访问者(编辑了来自 wikipedia 的示例代码):

class CarElementPrintVisitor implements CarElementVisitor {
public void visit(CarElement element) {
if (element.getClass() == Wheel.class)
{
return visit((Wheel)element);
}
else if (element.getClass() == Engine.class)
{
return visit((Engine)element);
}
else if (element.getClass() == Body.class)
{
return visit((Body)element);
}
else //if (v.getClass() == Car car.class)
{
return visit((Car)element);
}
}

public void visit(Wheel wheel) {
System.out.println("Visiting " + wheel.getName() + " wheel");
}

public void visit(Engine engine) {
System.out.println("Visiting engine");
}

public void visit(Body body) {
System.out.println("Visiting body");
}

public void visit(Car car) {
System.out.println("Visiting car");
}
}

“public void visit(CarElement element)”方法有点难看(很长,如果添加更多 CarElement 则需要维护)但我想保留该方法,所以我尝试做得更好。

我最终尝试了这个:

    public void visit(CarElement element) {      
return visit(element.getClass().cast(element));
}

但是即使 element.getClass() 返回了正确的类,它也只是返回“visit(CarElement element)”,因此它以无限循环结束。

有谁知道该怎么做,我想做什么? (如果有可能,我不确定)。

最佳答案

您错过了访问者模式的美妙之处:accept(CarElementVisitor) 方法必须位于 CarElement 接口(interface)中,并且使用适当的类型调用访问者自身。重新阅读维基百科文章。

关于java - 一些具有访问者模式的非常通用的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8390727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com