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(); } }