gpt4 book ai didi

java - 如何为编辑器正确使用具有不同形状的访问者模式

转载 作者:行者123 更新时间:2023-12-01 18:09:31 26 4
gpt4 key购买 nike

我正在为不同的形状对象创建一个编辑器。我偶然发现了我认为真正符合我需求的访客模式。
我有一个 Element 类,其中包含一个名为 attrs

的字段
public class Element {
...
private Shape attrs;
...
}

我的 Shape 类在访问者设计模式中看起来像这样。

public abstract class Shape {
public abstract void accept(ShapeVisitor v);

public interface ShapeVisitor{
public void visit(CircleObject circle);
public void visit(RectangleObject rectangle);
}
}

Shape 的实际实例是在 RectangleObject 类中定义的,该类扩展了 Shape 并保存了 Rectangle 字段。这种结构的原因是我正在使用 Jackson 进行序列化和反序列化以获得特定的 JSON 布局。

public class RectangleObject extends Shape {

private Rectangle rect;

public class Rectangle {
private String fill;

public String getFill() {
return fill;
}
public void setFill(String fill) {
this.fill = fill;
}

@Override
public void accept(JointShapeVisitor v) {
v.visit(this);
}
}

最后我的编辑器实现了访问者方法。

public class Editor implements ShapeVisitor{
@Override
public void visit(CircleObject circle) {

}

@Override
public void visit(RectangleObject rectangle) {

}


public void setComponent(JsonArray arguments){
Element element = getFromJson(arguments);
visit(element.getAttrs()); // *** this does obv. not work ***
}
}

element.getAttrs() 返回 JointShape,但我这里需要一个 CircleObjectRectangleObject

<小时/>

如何将 ShapeObject 的正确实例传递给访问方法?我做错了什么吗?

致以诚挚的问候。

最佳答案

嗯...一个小错误。因为您在 Shape 类中正确声明了 accept 方法,所以您只需调用它即可:

element.getAttrs().accept(this);

因此,只需将编辑器本身提供为访问者来调用形状的接受方法即可。形状实现中的回调将调用正确的访问者方法。

关于java - 如何为编辑器正确使用具有不同形状的访问者模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33999177/

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