哪种设计模式可用于形状编辑器?目前使用的访客模式

时间:2015-11-30 14:20:24

标签: java design-patterns visitor-pattern

从我earlier about the usage of the visitor pattern for a shape editor的问题来看,我得出结论,我必须打破它的设计规则。
主要是因为我需要更新我的Shape字段,所以基本上我需要将参数传递回访问者。

现在我使用ShapeObject的变量来填充UI字段。

public class Editor implements ShapeVisitor{

    private Shape shape;

    @Override
    public Foo visit(CircleObject circle) {
          // populate fields
          shape = circle;
          ((CircleObject) shape).getText().setCaption("test");
    }

    @Override
    public void visit(RectangleObject rectangle) {
          // populate fields
           shape = new RectangleObject();
    }


    public void setComponent(JsonArray arguments){
      Element element = getFromJson(arguments);
      element.getAttrs().accept(this);
    }
}

在我的代码中的某个地方,我有一个Save Button,它应该更新ShapeObject。

        @Override
        public void buttonClick(ClickEvent event) {
                    element.setAttrs(shape);    
        }

基本上我正在做的是创建一个ShapeObject的新实例并更新那里的字段。然后我通过element将其传递给element.setAttrs(shape)

基本上我根本不需要访问者模式,因为我可以使用instanceof方法中的setComponent运算符实现相同的功能。我正在尽力避免使用此运算符,因为在不久的将来,我会有更多ShapeObjects然后这两个。 我不确定这是否是我应采取的方法,或者对于自定义形状编辑器可能有更好的方法。

最好的问候。

Shape类看起来像访问者模式

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

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

instanceof的方法就是这个

public void setComponent(JsonArray arguments){
      Element element = getFromJson(arguments);
      if(element.getAttrs() instanceof RectangleObject)
        shape = new RectangleObject;
    }

0 个答案:

没有答案