gpt4 book ai didi

java - 解开 builder 模式的疑惑

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:29:33 26 4
gpt4 key购买 nike

我正在学习构建器模式,到目前为止我了解到,它是用于初始化的常用模式的一个很好的替代方案:

  • 伸缩构造函数模式

  • JavaBean 模式

问题是,我真的不喜欢从我的域模型中的对象中删除 getter 和 setter。我总是喜欢将它们保留为 POJO。我不喜欢它的原因之一是:如果我不使用 POJO,那么在使用 ORM 框架时注释变量并不容易...

所以这是我的疑惑:- 是否可以在不使用静态内部类的情况下实现构建器模式?- 如果我必须通过使用内部类来使用构建器模式,你认为保留 getter 和 setter 是否正确?-我做了一个练习的小例子,我试图避免内部类。你能告诉我你怎么看吗?

产品

    public class Product
{
private String color;
private int price;

public Product() {
}

public String getColor() {
return color;
}

public void setColor(String color) {
this.color = color;
}

public int getPrice() {
return price;
}

public void setPrice(int price) {
this.price = price;
}

public String toString() {
return getColor() + "\n" + getPrice();
}
}

build 者

public class Builder
{
private Product product;

public Builder() {
product = new Product();
}
public Builder withColor(String color) {
product.setColor(color);
return this;
}

public Builder withPrice(int price) {
product.setPrice(price);
return this;
}
public Product build() {
return product;
}
}**

客户端

public class Client
{

public static void main(String[] args) {
System.out.println(new Builder().withColor("Black").withPrice(11).build());
System.out.println("-----------------------------------------------------");
System.out.println(new Builder().withColor("Blue").withPrice(12).build());
}
}

enter image description here

最佳答案

Builder 模式对于创建不可变对象(immutable对象)和避免多个带有可选参数的构造函数很有用。

IMO 使用 Builder 模式构建可以使用 setter 更新的 POJO 是无用的。您只需创建一个额外的类。

根据所使用的 ORM 框架,它可能不需要 setter 方法。但只能通过反射(reflection)为成员分配值(value)。

产品类别:

public final class Product {
private final String color;
private final int price;

public Product(Builder builder) {
this.color = builder.getColor();
this.price = builder.getPrice();
}

public String getColor() {
return color;
}

public int getPrice() {
return price;
}

public String toString() {
return getColor() + "\n" + getPrice();
}
}

生成器类:

public final class Builder {

private String color;
private int price;

public Builder() {
// Assign any default values
}

public Builder color(String color) {
this.color = color;
return this;
}

public Builder price(int price) {
this.price = price;
return this;
}

protected String getColor() {
return color;
}

protected int getPrice() {
return price;
}

public Product build() {
return new Product(this);
}
}

关于java - 解开 builder 模式的疑惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12930852/

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