package de.bht.fpa.statepattern.v1; public class CoffeeMachine { private static final int NO_CHIP = 0; private static final int CHIP_INSERTED = 1; private static final int BEVERAGE_SELECTED = 2; private int state = NO_CHIP; public CoffeeMachine() { System.out.println("\nWillkommen."); } public String insertChip() { StringBuilder sb = new StringBuilder(); if (state == NO_CHIP) { sb.append("Sie haben einen Chip eingelegt. Wählen Sie ein Getränk."); state = CHIP_INSERTED; } else if (state == CHIP_INSERTED) { sb.append("Sie haben bereits einen Chip eingelegt."); } else if (state == BEVERAGE_SELECTED) { sb.append("Bitte warten Sie. Wir bereiten bereits Ihr Getränk zu."); } return sb.toString(); } public String ecjectChip() { StringBuilder sb = new StringBuilder(); if (state == NO_CHIP) { sb.append("Sie haben keinen Chip eingelegt den wir Ihnen auswerfen können."); } else if (state == CHIP_INSERTED) { sb.append("Ihr eingelegter Chip wird ausgeworfen."); state = NO_CHIP; } else if (state == BEVERAGE_SELECTED) { sb.append("Ihr Chip kann nicht ausgeworfen werden, da Sie bereits ein Getränk gewählt haben."); } return sb.toString(); } public String selectBeverage() { StringBuilder sb = new StringBuilder(); if (state == NO_CHIP) { sb.append("Sie haben ein Getränk ausgewählt, aber kein Chip eingeworfen."); } else if (state == CHIP_INSERTED) { sb.append("Sie haben ein Getränk ausgewählt."); state = BEVERAGE_SELECTED; sb.append(dispenseBeverage()); } else if (state == BEVERAGE_SELECTED) { sb.append("Sie haben bereits ein Getränk gewählt."); } return sb.toString(); } private String dispenseBeverage() { StringBuilder sb = new StringBuilder(); if (state == NO_CHIP) { sb.append("Sie müssen zuerst einen Chip einlegen."); } else if (state == CHIP_INSERTED) { sb.append("Sie haben ein Chip eingelegt, aber noch kein ein Getränk ausgewählt."); } else if (state == BEVERAGE_SELECTED) { sb.append("Ihr Getränk wird vorbereitet."); state = NO_CHIP; } return sb.toString(); } // ... }