这个直接来自 Effective java 2。我不确定第 2 项中的这个陈述是什么意思
Builder 模式很灵活。单个构建器可用于构建多个对象。构建器的参数可以在对象创建之间进行调整以改变对象。
我无法想出一个例子来做到这一点。请通过一个例子帮助我理解这一点。
这个直接来自 Effective java 2。我不确定第 2 项中的这个陈述是什么意思
Builder 模式很灵活。单个构建器可用于构建多个对象。构建器的参数可以在对象创建之间进行调整以改变对象。
我无法想出一个例子来做到这一点。请通过一个例子帮助我理解这一点。
这篇博文提供了 JavaFX 2 API 使用的构建器对象的一个很好的示例。
单个构建器可用于构建多个对象。
builder 对象负责构造一个有效的对象,但是在调用该方法之前不会构造该对象。build()
这意味着可以多次使用同一个构建器来构建完全不同的对象。
例子:
final TextBuilder builder = TextBuilder.create()
final Text text1 = builder
.text("Hello World!")
.x(50).y(50)
.fill(Color.WHITE)
.font(MY_DEFAULT_FONT)
.build();
final Text text2 = builder
.text("Goodbye World!")
.x(50).y(100)
.fill(Color.WHITE)
.font(MY_DEFAULT_FONT)
.build();
这可以根据您想要创建不同的对象多次执行。只是为了重申在build()
调用方法之前不会创建对象这一点,请考虑您可以执行以下操作:
final Text text1 = TextBuilder.create()
.text("Hello World!")
.text("Goodbye World!")
.text("Hello There!")
.build();
这将导致创建一个对象,文本设置为“Hello There”,因为这是build()
调用方法之前的属性值。
构建器的参数可以在对象创建之间进行调整以改变对象。
下面的示例演示了这一点。
// Set the properties that are common to all objects.
final TextBuilder builder = TextBuilder.create()
.x(50)
.fill(Color.WHITE)
.font(MY_DEFAULT_FONT);
// Use the builder to construct different objects that have the
// properties set above as well as the additional ones set here.
final Text text1 = builder.text("Hello World!").y(50).build();
final Text text2 = builder.text("Goodbye World!").y(100).build();
final Text text3 = builder.text("JavaFX is fun!").y(150).build();
如果你想建造你需要的房子:墙壁、地板、楼梯、窗户……当你创建一个 HouseBulder 类时,你可以在你的 HousBuilder 类中创建所有这些对象。因此,“想要房子的用户”不必知道对象:墙壁、地板……以及必须按什么顺序建造。
构建器模式构建一个复杂对象(一个复杂对象是许多对象的组合,它一个一个地构建每个对象)并最终返回复杂对象。
一个物体的建造应该是非常通用的。“Micho”给出了一个非常好的房屋建造例子。您必须以这样一种方式制作 HouseBuilder 类,即任何新的 HouseBuilder 对象都可以与其他 HouseBuilder 对象不同。即一个人想在他家里面建造有楼梯的房子,而另一个人想要他的房子里面没有楼梯。所以你的复杂对象应该是非常通用的。