public abstract class DwarvenMineWorker {
private static final Logger LOGGER = LoggerFactory.getLogger(DwarvenMineWorker.class);
public void goToSleep() { LOGGER.info("{} goes to sleep.", name()); }
public void wakeUp() { LOGGER.info("{} wakes up.", name()); }
public void goHome() { LOGGER.info("{} goes home.", name()); }
public void goToMine() { LOGGER.info("{} goes to the mine.", name()); }
private void action(Action action) { switch (action) { case GO_TO_SLEEP: goToSleep(); break; case WAKE_UP: wakeUp(); break; case GO_HOME: goHome(); break; case GO_TO_MINE: goToMine(); break; case WORK: work(); break; default: LOGGER.info("Undefined action"); break; } }
public void action(Action... actions) { for (Action action : actions) { action(action); } }
public abstract void work();
public abstract String name();
static enum Action { GO_TO_SLEEP, WAKE_UP, GO_HOME, GO_TO_MINE, WORK } }
public class DwarvenTunnelDigger extends DwarvenMineWorker {
private static final Logger LOGGER = LoggerFactory.getLogger(DwarvenTunnelDigger.class);
@Override public void work() { LOGGER.info("{} creates another promising tunnel.", name()); }
@Override public String name() { return "Dwarven tunnel digger"; } }
public class DwarvenGoldDigger extends DwarvenMineWorker {
private static final Logger LOGGER = LoggerFactory.getLogger(DwarvenGoldDigger.class);
@Override public void work() { LOGGER.info("{} digs for gold.", name()); }
@Override public String name() { return "Dwarf gold digger"; } }
public class DwarvenCartOperator extends DwarvenMineWorker {
private static final Logger LOGGER = LoggerFactory.getLogger(DwarvenCartOperator.class);
@Override public void work() { LOGGER.info("{} moves gold chunks out of the mine.", name()); }
@Override public String name() { return "Dwarf cart operator"; } }
|