gpt4 book ai didi

java - c++ 中有效的 java builder 习语等价物?

转载 作者:太空狗 更新时间:2023-10-29 19:46:46 25 4
gpt4 key购买 nike

自从阅读 Effective Java 以来,这是我一直在使用的一个很好的习惯用法。我一直在努力寻找 C++ 等价物或类似的东西,但运气不佳。 GoF 书中的传统构建器模式并不适用于我的情况。这是一个具有非常困惑的构造函数的复杂对象。下面是 Java 的一个小实现。

class ComplicatedObject {

private String field1;
private String field2;
private int field3;

private ComplicatedObject(Builder builder) {

this.field1 = builder.myField1;
this.field2 = builder.myField2;
this.field3 = builder.myField3;

}

public static class Builder {

private String myField1 = "some default";
private String myField2 = "some other default";
private int myField3 = -1;

public Builder() { }
public Builder field1(String val) {
this.myField1 = val;
return this;
}
public Builder field2(String val) {
this.myField2 = val;
return this;
}
public Builder field3(int val) {
this.myField3 = val;
return this;
}
public ComplicatedObject build() {
return new ComplicatedObject(this);
}
}
public static void main(final String[] args) {
//built like this

ComplicatedObject obj = new ComplicatedObject.Builder().field1("blah").field2("lol").field3(4).build();

}
}

最佳答案

它不仅可以适应 C++,而且这个习语是 C++ 改编而来的。

我想我第一次听说这个习语是在 Java 出现之前。 IIRC Bjarne Stroustrup 在 C++ 第二版中提到了这一点,作为对为什么 C++ 不需要 Smalltalk 风格命名参数的解释。

我的日期可能有误,但这在 C++ 中已经有 15 年了。

编辑:它似乎首先在 C++ 的设计和演化 (6.5.1) 中被描述,在那里它被称为命名函数参数

关于java - c++ 中有效的 java builder 习语等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7520250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com