package com.iluwatar; /** * * DwarvenMineWorker is one of the goldmine subsystems. * */ public abstract class DwarvenMineWorker { public void goToSleep() { System.out.println(name() + " goes to sleep."); } public void wakeUp() { System.out.println(name() + " wakes up."); } public void goHome() { System.out.println(name() + " goes home."); } public void goToMine() { System.out.println(name() + " goes to the mine."); } 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: System.out.println("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 } }