package builder; public class House { private final int rooms; private final int floors; private final boolean hasGarage; private final boolean hasGarden; private final boolean hasPool; private final String roofType; private House(Builder builder) { this.rooms = builder.rooms; this.floors = builder.floors; this.hasGarage = builder.hasGarage; this.hasGarden = builder.hasGarden; this.hasPool = builder.hasPool; this.roofType = builder.roofType; } @Override public String toString() { return "House{rooms=" + rooms + ", floors=" + floors + ", garage=" + hasGarage + ", garden=" + hasGarden + ", pool=" + hasPool + ", roof='" + roofType + "'}"; } public static class Builder { private int rooms = 1; private int floors = 1; private boolean hasGarage = false; private boolean hasGarden = false; private boolean hasPool = false; private String roofType = "flat"; public Builder rooms(int rooms) { this.rooms = rooms; return this; } public Builder floors(int floors) { this.floors = floors; return this; } public Builder garage(boolean v) { this.hasGarage = v; return this; } public Builder garden(boolean v) { this.hasGarden = v; return this; } public Builder pool(boolean v) { this.hasPool = v; return this; } public Builder roofType(String roofType) { this.roofType = roofType; return this; } public House build() { return new House(this); } } }