【问题标题】:Access level to elements in visitor pattern访问者模式中元素的访问级别
【发布时间】:2011-07-16 08:54:29
【问题描述】:

visitor pattern 中,我希望客户端只能访问元素的getter,而访问者应该可以访问getter 和setter。你将如何实现它?

我不希望访问者与模型在同一个包中(已经有很多类)。 我正在考虑引入包含 setter 和 accept 方法的 IWriteable 接口。 有没有更好的办法?

谢谢

【问题讨论】:

  • 您最初的想法:两个接口Client(只读)和Visitor(读/写)是规范的方式。
  • 类的数量不是将它们放入包中的理由。问题是它在逻辑上属于哪里。我总是将遍历模型的访问者放入模型包中。然而 CPerkins 是对的,两个接口是最直接的方法,但不会让你免于来回转换的流氓程序员,例如
  • 感谢 CPerkins 和 Angel 的回复。

标签: java design-patterns visitor-pattern


【解决方案1】:

@Angel O'Sphere:

该包将包含模型、访问者和工厂,大约 2 倍(接口和实现)。 我也有一些关于流氓程序员的想法,这就是我问的原因。 另一种方法是:

public class ModelImpl implement IRead {
  @Override
  public Foo getFoo() {...}

  private void setFoo(Foo f) {...}

  public void accept(Visitor v) {
    v.visit(new ModelEditor());
  }

  private class ModelEditor implement IWrite {
    @Override
    public void setFoo(Foo f) {
      ModelImpl.this.setFoo(f);
    }
  }
}

但是这种方法有很多缺点,而且如果没有生成技术的话会很麻烦:o

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    相关资源
    最近更新 更多