Design patterns. Builder. Robot Builder
From AsIsWiki
Robot Builder
public class Main {
public static void main(String[] args) {
Designer designer = new Designer();
RobotBuilder combatRobotBuilder = new CombatRobotBuilder();
designer.setRobotBuilder(combatRobotBuilder);
designer.constructRobot();
Robot robot = designer.getRobot();
System.out.println(robot.toString());
}
}
class Robot {
private String battery = "";
private String movement = "";
private String mission = "";
public void setBattery(String battery) {
this.battery = battery;
}
public void setMovement(String movement) {
this.movement = movement;
}
public void setMission(String mission) {
this.mission = mission;
}
@Override
public String toString() {
return "Robot{" +
"battery='" + battery + '\'' +
", movement='" + movement + '\'' +
", mission='" + mission + '\'' +
'}';
}
}
abstract class RobotBuilder {
protected Robot robot;
public Robot getRobot() {
return robot;
}
public void createNewRobot() {
robot = new Robot();
}
public abstract void buildBattery();
public abstract void buildMovement();
public abstract void buildMission();
}
class CombatRobotBuilder extends RobotBuilder {
public void buildBattery() {
robot.setBattery("nuclear");
}
public void buildMovement() {
robot.setMovement("flying");
}
public void buildMission() {
robot.setMission("scout");
}
}
class HomeRobotBuilder extends RobotBuilder {
public void buildBattery() {
robot.setBattery("solar");
}
public void buildMovement() {
robot.setMovement("wheels");
}
public void buildMission() {
robot.setMission("housemaid");
}
}
class Designer {
private RobotBuilder robotBuilder;
public void setRobotBuilder(RobotBuilder rb) {
robotBuilder = rb;
}
public Robot getRobot() {
return robotBuilder.getRobot();
}
public void constructRobot() {
robotBuilder.createNewRobot();
robotBuilder.buildBattery();
robotBuilder.buildMovement();
robotBuilder.buildMission();
}
}