Skip to content

Commit 07d3851

Browse files
committed
initial commit
0 parents  commit 07d3851

5 files changed

Lines changed: 192 additions & 0 deletions

File tree

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/target/
2+
.classpath
3+
.project
4+
.settings/

pom.xml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0"
2+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
5+
<modelVersion>4.0.0</modelVersion>
6+
<groupId>example</groupId>
7+
<artifactId>builder</artifactId>
8+
<version>1.0</version>
9+
10+
<properties>
11+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
12+
<maven.compiler.source>11</maven.compiler.source>
13+
<maven.compiler.target>11</maven.compiler.target>
14+
15+
<commons.lang3.version>3.9</commons.lang3.version>
16+
<junit.jupiter.engine.version>5.5.2</junit.jupiter.engine.version>
17+
</properties>
18+
19+
<dependencies>
20+
<dependency>
21+
<groupId>org.junit.jupiter</groupId>
22+
<artifactId>junit-jupiter-engine</artifactId>
23+
<version>${junit.jupiter.engine.version}</version>
24+
<scope>test</scope>
25+
</dependency>
26+
<dependency>
27+
<groupId>org.apache.commons</groupId>
28+
<artifactId>commons-lang3</artifactId>
29+
<version>${commons.lang3.version}</version>
30+
</dependency>
31+
</dependencies>
32+
33+
</project>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package example.builder;
2+
3+
public class Name {
4+
5+
private final String firstName;
6+
private final String middleName;
7+
private final String lastName;
8+
9+
public Name(String firstName, String middleName, String lastName) {
10+
super();
11+
this.firstName = firstName;
12+
this.middleName = middleName;
13+
this.lastName = lastName;
14+
}
15+
16+
public String getFirstName() {
17+
return firstName;
18+
}
19+
20+
public String getMiddleName() {
21+
return middleName;
22+
}
23+
24+
public String getLastName() {
25+
return lastName;
26+
}
27+
}
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package example.builder;
2+
3+
import org.apache.commons.lang3.builder.EqualsBuilder;
4+
import org.apache.commons.lang3.builder.HashCodeBuilder;
5+
import org.apache.commons.lang3.builder.ToStringBuilder;
6+
7+
public class Person {
8+
9+
private String firstName;
10+
private String middleName;
11+
private String lastName;
12+
private int age;
13+
14+
// default constructor so the builder can create an empty version
15+
private Person() {
16+
}
17+
18+
private Person(Person person) {
19+
this.firstName = person.getFirstName();
20+
this.middleName = person.getMiddleName();
21+
this.lastName = person.getLastName();
22+
this.age = person.getAge();
23+
}
24+
25+
public String getFirstName() {
26+
return firstName;
27+
}
28+
29+
public String getMiddleName() {
30+
return middleName;
31+
}
32+
33+
public String getLastName() {
34+
return lastName;
35+
}
36+
37+
public int getAge() {
38+
return age;
39+
}
40+
41+
@Override
42+
public boolean equals(Object o) {
43+
return EqualsBuilder.reflectionEquals(this, o);
44+
}
45+
46+
@Override
47+
public int hashCode() {
48+
return HashCodeBuilder.reflectionHashCode(this);
49+
}
50+
51+
@Override
52+
public String toString() {
53+
return ToStringBuilder.reflectionToString(this);
54+
}
55+
56+
public static Builder getBuilder() {
57+
return new Builder();
58+
}
59+
60+
public static final class Builder {
61+
62+
private final Person person = new Person();
63+
64+
public Builder firstName(String firstName) {
65+
this.person.firstName = firstName;
66+
return this;
67+
}
68+
69+
public Builder middleName(String middleName) {
70+
this.person.middleName = middleName;
71+
return this;
72+
}
73+
74+
public Builder lastName(String lastName) {
75+
this.person.lastName = lastName;
76+
return this;
77+
}
78+
79+
public Builder age(int age) {
80+
this.person.age = age;
81+
return this;
82+
}
83+
84+
public Builder name(Name name) {
85+
this.person.firstName = name.getFirstName();
86+
this.person.middleName = name.getMiddleName();
87+
this.person.lastName = name.getLastName();
88+
return this;
89+
}
90+
91+
//a new person is created here so that if a method in this instance of the Builder is called it will not change the value of the Person being returned.
92+
public Person build() {
93+
return new Person(person);
94+
}
95+
}
96+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package builder;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import org.junit.jupiter.api.Test;
6+
7+
import example.builder.Person;
8+
9+
class PersonTest {
10+
11+
@Test
12+
void testBuilder() {
13+
String firstName = "foo";
14+
String middleName = "bar";
15+
String lastName = "baz";
16+
int age = 50;
17+
18+
Person person1 = Person.getBuilder()
19+
.firstName(firstName)
20+
.middleName(middleName)
21+
.lastName(lastName)
22+
.age(age)
23+
.build();
24+
25+
assertEquals(firstName, person1.getFirstName());
26+
assertEquals(middleName, person1.getMiddleName());
27+
assertEquals(lastName, person1.getLastName());
28+
assertEquals(age, person1.getAge());
29+
30+
}
31+
32+
}

0 commit comments

Comments
 (0)