BAEL-7615 - Implement the Builder Pattern in Java 8 (#16399)
* BAEL-7255 - Implementing GraphQL Mutation without Returning Data * BAEL-7615 - Implement the Builder Pattern in Java 8 * BAEL-7615 - Implement the Builder Pattern in Java 8
This commit is contained in:
parent
e975895695
commit
977071357e
|
@ -19,10 +19,15 @@
|
|||
<version>${mockito-inline.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.32</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<properties>
|
||||
<mockito-inline.version>5.2.0</mockito-inline.version>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
</project>
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
package com.baeldung.builder.implementation;
|
||||
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class GenericBuilder<T> {
|
||||
|
||||
private final Supplier<T> supplier;
|
||||
|
||||
private GenericBuilder(Supplier<T> supplier) {
|
||||
this.supplier = supplier;
|
||||
}
|
||||
|
||||
public static <T> GenericBuilder<T> of(Supplier<T> supplier) {
|
||||
return new GenericBuilder<>(supplier);
|
||||
}
|
||||
|
||||
public <P> GenericBuilder<T> with(BiConsumer<T, P> consumer, P value) {
|
||||
return new GenericBuilder<>(() -> {
|
||||
T object = supplier.get();
|
||||
consumer.accept(object, value);
|
||||
return object;
|
||||
});
|
||||
}
|
||||
|
||||
public T build() {
|
||||
return supplier.get();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
package com.baeldung.builder.implementation;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
@Setter
|
||||
public class LombokPost {
|
||||
|
||||
private String title;
|
||||
|
||||
private String text;
|
||||
|
||||
private String category;
|
||||
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
package com.baeldung.builder.implementation;
|
||||
|
||||
public class Post {
|
||||
|
||||
private String title;
|
||||
|
||||
private String text;
|
||||
|
||||
private String category;
|
||||
|
||||
Post(Builder builder) {
|
||||
this.title = builder.title;
|
||||
this.text = builder.text;
|
||||
this.category = builder.category;
|
||||
}
|
||||
|
||||
Post() {}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public String getText() {
|
||||
return text;
|
||||
}
|
||||
|
||||
public String getCategory() {
|
||||
return category;
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public void setText(String text) {
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
public void setCategory(String category) {
|
||||
this.category = category;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Post{" + "title='" + title + '\'' + ", text='" + text + '\'' + ", category='" + category + '\'' + '}';
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
private String title;
|
||||
private String text;
|
||||
private String category;
|
||||
|
||||
public Builder() {}
|
||||
|
||||
public Builder title(String title) {
|
||||
this.title = title;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder text(String text) {
|
||||
this.text = text;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder category(String category) {
|
||||
this.category = category;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Post build() {
|
||||
return new Post(this);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
package com.baeldung.builder.implementation;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class BuilderImplementationUnitTest {
|
||||
|
||||
@Test
|
||||
void givenClassicBuilder_whenBuild_thenReturnObject() {
|
||||
|
||||
Post post = new Post.Builder()
|
||||
.title("Java Builder Pattern")
|
||||
.text("Explaining how to implement the Builder Pattern in Java")
|
||||
.category("Programming")
|
||||
.build();
|
||||
|
||||
assertEquals("Java Builder Pattern", post.getTitle());
|
||||
assertEquals("Explaining how to implement the Builder Pattern in Java", post.getText());
|
||||
assertEquals("Programming", post.getCategory());
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenGenericBuilder_whenBuild_thenReturnObject() {
|
||||
|
||||
Post post = GenericBuilder.of(Post::new)
|
||||
.with(Post::setTitle, "Java Builder Pattern")
|
||||
.with(Post::setText, "Explaining how to implement the Builder Pattern in Java")
|
||||
.with(Post::setCategory, "Programming")
|
||||
.build();
|
||||
|
||||
assertEquals("Java Builder Pattern", post.getTitle());
|
||||
assertEquals("Explaining how to implement the Builder Pattern in Java", post.getText());
|
||||
assertEquals("Programming", post.getCategory());
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenLombokBuilder_whenBuild_thenReturnObject() {
|
||||
|
||||
LombokPost post = LombokPost.builder()
|
||||
.title("Java Builder Pattern")
|
||||
.text("Explaining how to implement the Builder Pattern in Java")
|
||||
.category("Programming")
|
||||
.build();
|
||||
|
||||
assertEquals("Java Builder Pattern", post.getTitle());
|
||||
assertEquals("Explaining how to implement the Builder Pattern in Java", post.getText());
|
||||
assertEquals("Programming", post.getCategory());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue