Created
February 19, 2019 18:41
-
-
Save viniciustavanoferreira/ff58be7c8d498ee73be08794f3eecf25 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class User | |
{ | |
//All final attributes | |
private final String firstName; // required | |
private final String lastName; // required | |
private final int age; // optional | |
private final String phone; // optional | |
private final String address; // optional | |
private User(UserBuilder builder) { | |
this.firstName = builder.firstName; | |
this.lastName = builder.lastName; | |
this.age = builder.age; | |
this.phone = builder.phone; | |
this.address = builder.address; | |
} | |
//All getter, and NO setter to provde immutability | |
public String getFirstName() { | |
return firstName; | |
} | |
public String getLastName() { | |
return lastName; | |
} | |
public int getAge() { | |
return age; | |
} | |
public String getPhone() { | |
return phone; | |
} | |
public String getAddress() { | |
return address; | |
} | |
@Override | |
public String toString() { | |
return "User: "+this.firstName+", "+this.lastName+", "+this.age+", "+this.phone+", "+this.address; | |
} | |
public static class UserBuilder | |
{ | |
private final String firstName; | |
private final String lastName; | |
private int age; | |
private String phone; | |
private String address; | |
public UserBuilder(String firstName, String lastName) { | |
this.firstName = firstName; | |
this.lastName = lastName; | |
} | |
public UserBuilder age(int age) { | |
this.age = age; | |
return this; | |
} | |
public UserBuilder phone(String phone) { | |
this.phone = phone; | |
return this; | |
} | |
public UserBuilder address(String address) { | |
this.address = address; | |
return this; | |
} | |
//Return the finally consrcuted User object | |
public User build() { | |
User user = new User(this); | |
validateUserObject(user); | |
return user; | |
} | |
private void validateUserObject(User user) { | |
//Do some basic validations to check | |
//if user object does not break any assumption of system | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment