Skip to content

Added Builder Design pattern implementation in Java and its test #757

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 17, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 82 additions & 0 deletions src/main/java/com/designpatterns/builderpattern/Desktop.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package src.main.java.com.designpatterns.builderpattern;

/**
* The Builder is a design pattern designed to provide a flexible solution to various object creation problems in
* object-oriented programming. The intent of the Builder design pattern is to separate the construction of a complex
* object from its representation.
*
* @see <a href="https://en.wikipedia.org/wiki/Builder_pattern">Builder Pattern</a>
*/

public class Desktop {
private String CPU;
private String RAM;

private boolean isGraphicCardEnabled;
private String operatingSystem;
private int diskSizeGB;
private String graphicCard;

private Desktop(DesktopBuilder builder) {
this.CPU = builder.CPU;
this.RAM = builder.RAM;
this.isGraphicCardEnabled = builder.isGraphicCardEnabled;
this.operatingSystem = builder.operatingSystem;
this.diskSizeGB = builder.diskSizeGB;
this.graphicCard = builder.graphicCard;
}

/**
* Builder class for the above Desktop class. Constructs the Desktop by invoking the Desktop class constructor and
* allows access to set optional fields in the Desktop class.
*/
public static class DesktopBuilder {
private String CPU;
private String RAM;
private boolean isGraphicCardEnabled;
private String operatingSystem;
private int diskSizeGB;
private String graphicCard;

public DesktopBuilder(String CPU, String RAM) {
this.CPU = CPU;
this.RAM = RAM;
}

public DesktopBuilder setGraphicCardEnabled(boolean graphicCardEnabled) {
this.isGraphicCardEnabled = graphicCardEnabled;
return this;
}

public DesktopBuilder setOperatingSystem(String operatingSystem) {
this.operatingSystem = operatingSystem;
return this;
}

public DesktopBuilder setDiskSizeGB(int diskSize) {
this.diskSizeGB = diskSize;
return this;
}

public DesktopBuilder setGraphicCard(String graphicCard) {
this.graphicCard = graphicCard;
return this;
}

public Desktop build() {
return new Desktop(this);
}
}

@Override
public String toString() {
return "Desktop{" +
"CPU='" + CPU + '\'' +
", RAM='" + RAM + '\'' +
", isGraphicCardEnabled=" + isGraphicCardEnabled +
", operatingSystem='" + operatingSystem + '\'' +
", diskSizeGB=" + diskSizeGB +
", graphicCard='" + graphicCard + '\'' +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package src.test.java.com.designpatterns.builderpattern;

import org.junit.Assert;
import org.junit.Test;
import src.main.java.com.designpatterns.builderpattern.Desktop;

public class DesktopBuilderTest {
private final String configOne = "Desktop{CPU='Intel i7', RAM='Corsair Vengeance 3000', isGraphicCardEnabled=true" +
", operatingSystem='Windows 10', diskSizeGB=16, graphicCard='NVIDIA GTX 1080'}";
private final String configTwo = "Desktop{CPU='Intel i5', RAM='HyperX Fury v5', isGraphicCardEnabled=true, " +
"operatingSystem='Red Hat Enterprise', diskSizeGB=16, graphicCard='NVIDIA RTX 2080'}";

@Test
public void testDesktopBuilder() {
Desktop d1 = new Desktop.DesktopBuilder("Intel i7", "Corsair Vengeance 3000")
.setDiskSizeGB(16)
.setGraphicCard("NVIDIA GTX 1080")
.setGraphicCardEnabled(true)
.setOperatingSystem("Windows 10")
.build();
Assert.assertEquals(d1.toString(), configOne);

Desktop d2 = new Desktop.DesktopBuilder("Intel i5", "HyperX Fury v5")
.setDiskSizeGB(16)
.setGraphicCard("NVIDIA RTX 2080")
.setGraphicCardEnabled(true)
.setOperatingSystem("Red Hat Enterprise")
.build();
Assert.assertEquals(d2.toString(), configTwo);
}

}