Merge pull request #757 from abhijay94/Development
Added Builder Design pattern implementation in Java and its test
This commit is contained in:
commit
6458e31c45
82
src/main/java/com/designpatterns/builderpattern/Desktop.java
Normal file
82
src/main/java/com/designpatterns/builderpattern/Desktop.java
Normal file
@ -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 + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user