gpt4 book ai didi

java - 从 JavaBeans 更改为 Builder 模式

转载 作者:行者123 更新时间:2023-11-30 03:31:07 27 4
gpt4 key购买 nike

我在我的应用程序中使用 Retrofit,我有用于发出请求和解析响应的 POJO 类。目前我正在使用 JavaBeans 模式,并且为所有 POJO 类的类中的所有变量提供 getter 和 setter。

这是我的用户类别的例子

public class User {
@SerializedName("user_name")
private String userName;
@SerializedName("password")
private String userPassword;
@SerializedName("address_info")
private AddressInfo AddressInfo;
@SerializedName("contact_info")
private ContactInfo ContactInfo;

/*
*@return The userName
*/
public String getUserName() {
return userName;
}

/**
* @param userName The userName
*/

public void setUserName(String userName) {
this.userName = userName;
}

/**
* @return The userPassword
*/

public String getPassword() {
return userPassword;
}

/**
* @param userPassword The userPassword
*/

public void setPassword(String userPassword) {
this.userPassword = userPassword;
}
/// so on for the AddressInfo and ContactInfo
}

这很有效。我正在尝试使用构建器模式而不是 JavaBeans 模式。

我将我的用户类别更改为:

public class User {
@SerializedName("user_name")
private String userName;
@SerializedName("password")
private String userPassword;
@SerializedName("address_info")
private AddressInfo AddressInfo;
@SerializedName("contact_info")
private ContactInfo ContactInfo;


public static class UserBuilder {

private String userName;
private String userPassword;
private AddressInfo AddressInfo;
private ContactInfo ContactInfo;

//builder methods for setting property
public UserBuilder userName(String user_name) {
this.userName = user_name;
return this;
}

public UserBuilder userPassword(String user_password) {
this.userPassword = user_password;
return this;
}

public UserBuilder AddressInfo(AddressInfo addressInfo) {
this.AddressInfo = addressInfo;
return this;
}

public UserBuilder ContactInfo(ContactInfo contactInfo) {
this.ContactInfo = contactInfo;
return this;
}

//return fully build object
public User build() {
return new User(this);
}
}

//private constructor to enforce object creation through builder

private User(UserBuilder builder) {
this.userName = builder.userName;
this.userPassword = builder.userPassword;
this.AddressInfo = builder.AddressInfo;
this.ContactInfo = builder.ContactInfo;
}

//Getters for userName,userPassword,AddressInfo and ContactInfo
}

AddressInfo 类

public class AddressInfo {
@SerializedName("address_1")
private String address1;
@SerializedName("city")
private String city;
@SerializedName("state")
private String state;
@SerializedName("zip_code")
private String zipCode;

/**
* @return The address1
*/
public String getAddress1() {
return address1;
}

/**
* @return The city
*/
public String getCity() {
return city;
}

/**
* @return The state
*/
public String getState() {
return state;
}

/**
* @return The zip code
*/
public String getZipCode() {
return zipCode;
}
}

问题:1. 我从 AddressInfo 和 ContactInfo POJO 类中删除了 setter。我是否还需要在 AddressInfo 和 ContactInfo 类中实现构建器模式?这就是模式的工作原理吗?

  • 我怎样才能实现这一目标:

      User user = new User.UserBuilder().userName("test").userPassword("******").address("100 Townsend St").city("San Francisco").zip("94107").build();
  • 最佳答案

    User user = new User.UserBuilder().userName("test")
    .userPassword("******").address("100 Townsend St")
    .city("San Francisco").zip("94107").build();

    你会把东西搞混的。 UserBuildr 应该负责使用其地址/联系信息来构建用户,而不是同时构建它们。您应该为 User 类中的 AddressInfoContactInfo 实例提供 getter 和 setter,并在 UserBuilder< 中提供设置它们的方法。为每个对象创建一个构建器并像这样使用它们。

    User user = new User.UserBuilder().userName("test")
    .userPassword("******").addressInfo.(new AdressInfo.Builder()
    .address1("100 Townsend St")
    .city("San Francisco").zip("94107").build()).build();

    ContactInfo 执行相同的操作。

    如果您不希望外部访问 AddressInfoContactInfo 的 setter ,您可以对它们进行保护,构建器仍然可以访问它们,因为它是内部类。

    关于java - 从 JavaBeans 更改为 Builder 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29017524/

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