Design patterns. Builder. Robot Builder
From AsIsWiki
Robot Builder
<syntaxhighlight> 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(); }
} </syntaxhighlight>