【问题标题】:Using the builder pattern in a for loop在 for 循环中使用构建器模式
【发布时间】:2014-09-17 22:36:26
【问题描述】:

所以我遇到了一些看起来像这样的代码:

Polygon polygon = Polygon.Builder()
                .addVertex(new Point(38.085255f, -122.734590f))
                .addVertex(new Point(37.513400f, -122.726350f))
                .addVertex(new Point(37.044617f, -122.413239f))
                .addVertex(new Point(37.121307f, -121.765046f))
                .addVertex(new Point(37.497051f, -121.707368f))
                .addVertex(new Point(37.812351f, -121.905122f))
                .addVertex(new Point(37.899094f, -121.740327f))
                .addVertex(new Point(37.987900f, -121.877656f))
                .addVertex(new Point(37.886089f, -122.034211f))
                .addVertex(new Point(38.085247f, -122.366548f))
                .build();

这只是将具有浮点坐标的点添加到数组中,然后在最后构建多边形。无论如何,我的问题是是否有任何简单的方法可以让我循环通过这个 addVertex 进程而不必更改进程的基本结构?

我正在尝试做的基本想法是:

for(int i = 0; i < vertices.length; i++) {
    polygon.Builder.addVertex(new Point(vertices[i].getX(), vertices[i].getY());
}
polygon.Builder().build();

我试图尽可能地概括这个例子,希望我没有在这个过程中添加任何混淆。

【问题讨论】:

  • 这真的取决于坐标来自哪里。不过,您似乎已经想出了解决问题的方法——您只是在寻找实现吗?
  • @shekharsuman 知道了,谢谢

标签: java loops builder


【解决方案1】:

使用这种方法链接构建器模式,关键是要认识到对addVertex 的每次调用都会返回一个(新的)构建器。要循环它,您可以在每次迭代时用一个新构建器重复覆盖当前构建器。

PolygonBuilder builder = Polygon.Builder();

for (int i = 0; i < vertices.length; i++) {
    builder = builder.addVertex(new Point(vertices[i].getX(), vertices[i].getY());
}

Polygon polygon = builder.build();

无论每个addVertex 调用是否返回一个新的构建器,或者它是否每次都返回相同的构建器,这都有效。无论哪种方式。

【讨论】:

    【解决方案2】:

    是的。那应该行得通。呼叫不必在同一条线路上进行。因此它会循环工作。

    System.out.println(new StringBuilder().append(1).append(2).append(3).toString());
    

    一样
    StringBuilder sb = new StringBuilder();
    sb.append(1);
    sb.append(2);
    sb.append(3);
    System.out.println(sb.toString());
    

    相同
    StringBuilder sb = new StringBuilder();
    for(int i=1; i<=3; i++) {
      sb.append(i);
    }
    System.out.println(sb.toString());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 2020-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多