Java: Create Immutable Object using Builder Pattern
To create immutable Java object, we should use the Builder Pattern, as described in Effective Java. This is the pattern I normally used now for immutable class.
1: public class Person {
2: private final String name;
3: private final int age;
4: private final String email;
5: private final String mobileNo;
6:
7:
8: public String getName() {
9: return name;
10: }
11:
12: public int getAge() {
13: return age;
14: }
15:
16: public String getEmail() {
17: return email;
18: }
19:
20: public String getMobileNo() {
21: return mobileNo;
22: }
23:
24: public static class Builder {
25: // Mandatory
26: private final String name;
27: private final int age;
28:
29: // Optional
30: private String email;
31: private String mobileNo;
32:
33:
34: public Builder(String name, int age) {
35: this.name = name;
36: this.age = age;
37: }
38:
39: public Builder email(String email) {
40: this.email = email;
41: return this;
42: }
43:
44: public Builder mobileNo(String mobileNo) {
45: this.mobileNo = mobileNo;
46: return this;
47: }
48:
49: public Person build(){
50: return new Person(this);
51: }
52: }
53:
54: private Person(Builder builder){
55: name = builder.name;
56: age = builder.age;
57: email = builder.email;
58: mobileNo = builder.mobileNo;
59: }
60:
61:
62: public static void main(String[] args){
63: Person person = new Person.Builder(“jason”,28).email(“jason@hotmail.com”).mobileNo(“1234567890″).build();
64:
65: System.out.println(person.getName());
66: System.out.println(person.getAge());
67: System.out.println(person.getEmail());
68: System.out.println(person.getMobileNo());
69: }
70: }
- Person class constructor is declared as private
- Person class properties cannot be set directly.
- A Builder is used to create the Person instance
- Mandatory properties are part of the Builder constructor arguments
- Fluent interface is used in the Builder class
Related Posts
Did you enjoy this post? Why not leave a comment below and continue the conversation, or subscribe to my feed and get articles like this delivered automatically to your feed reader.

Comments
No comments yet.
Leave a comment