/**
* {@link <a href=
* "https://[Log in to view URL]"
* target= "_blank"></a>}
*
* @author itammb ( Italia Massimiliano Buscati )
* @version JDK 1.15
*
*/
class Main {
public static interface HouseBuilder {
public void setWall(Measurement measurment);
public void setDoor(Measurement measurment);
public void setWindows(Measurement measurment);
public void setRoof(Measurement measurment);
public void setGarage(Measurement measurment);
public void setSwimmingPool(Measurement measurment);
}
public static class Measurement {
public Measurement(double height, double width, double depth) {
this.height = height;
this.width = width;
this.depth = depth;
}
public double getHeight() {
return height;
}
public double getWidth() {
return width;
}
public double getDepth() {
return depth;
}
private final double height;
private final double width;
private final double depth;
@Override
public String toString() {
return "Measurement [height=" + height + ", width=" + width + ", depth=" + depth + "]";
}
}
public static class Apartment implements HouseBuilder {
public void setWall(Measurement measurment) {
wall = measurment;
}
public void setDoor(Measurement measurment) {
door = measurment;
}
public void setWindows(Measurement measurment) {
windows = measurment;
}
public void setRoof(Measurement measurment) {
roof = measurment;
}
public void setGarage(Measurement measurment) {
garage = measurment;
}
public void setSwimmingPool(Measurement measurment) {
swimmingPool = measurment;
}
private Measurement wall, door, windows, roof, garage, swimmingPool;
@Override
public String toString() {
return "Apartment [wall=" + wall + ", door=" + door + ", windows=" + windows + ", roof=" + roof
+ ", garage=" + garage + ", swimmingPool=" + swimmingPool + "]";
}
}
public static class ManagerBuilder {
public static enum HOUSE {
apartment, mansion
}
public ManagerBuilder(HouseBuilder builder) {
this.builder = builder;
}
public HouseBuilder getBuilder() {
return builder;
}
public void setBuilder(HouseBuilder builder, HOUSE house) {
this.builder = builder;
make(house);
}
private HouseBuilder builder;
public void make(HOUSE house) {
if (house.equals(HOUSE.apartment)) {
builder.setWall(new Measurement(2.3, 5, 0.20));
builder.setDoor(new Measurement(2, 0.6, 0.10));
builder.setWindows(new Measurement(1.3, 1, 0.8));
builder.setRoof(new Measurement(5, 5, 0.5));
builder.setGarage(new Measurement(5, 5, 0.5));
builder.setSwimmingPool(null);
} else if (house.equals(HOUSE.mansion)) {
builder.setWall(new Measurement(2.3, 5, 0.20));
builder.setDoor(new Measurement(2, 0.6, 0.10));
builder.setWindows(new Measurement(1.3, 1, 0.8));
builder.setRoof(new Measurement(5, 5, 0.5));
builder.setGarage(new Measurement(5, 5, 0.5));
builder.setSwimmingPool(new Measurement(5, 5, 1.5));
} else
builder = null;
}
}
public static void main(String args[]) {
// Unit test - uso del design pattern: builder
ManagerBuilder manager = new ManagerBuilder(new Apartment());
manager.make(ManagerBuilder.HOUSE.apartment);
HouseBuilder builder = manager.getBuilder();
if (builder instanceof Apartment)
System.out.println(((Apartment) manager.getBuilder()).toString());
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: