在for循环中使用构建器模式

时间:2014-09-17 22:36:26

标签: java loops builder

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

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();

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

2 个答案:

答案 0 :(得分:3)

使用此方法链接构建器模式,关键是要识别每次调用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调用是否返回新构建器,或者每次都返回相同的构建器。无论哪种方式。

答案 1 :(得分:0)

是。这应该工作。呼叫不必在同一条线路上进行。因此它可以循环工作。

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());