[refactor] Separate out one method to call actions for workers.

This commit is contained in:
ruslanpa 2015-02-10 09:33:03 +02:00
parent 0fbb4f4003
commit 04992483a1
2 changed files with 42 additions and 12 deletions

View File

@ -1,6 +1,7 @@
package com.iluwatar;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
@ -15,7 +16,7 @@ import java.util.List;
*/
public class DwarvenGoldmineFacade {
List<DwarvenMineWorker> workers;
private final List<DwarvenMineWorker> workers;
public DwarvenGoldmineFacade() {
workers = new ArrayList<>();
@ -25,23 +26,20 @@ public class DwarvenGoldmineFacade {
}
public void startNewDay() {
for (DwarvenMineWorker worker : workers) {
worker.wakeUp();
worker.goToMine();
}
makeActions(workers, DwarvenMineWorker.Action.WAKE_UP, DwarvenMineWorker.Action.GO_TO_MINE);
}
public void digOutGold() {
for (DwarvenMineWorker worker : workers) {
worker.work();
}
makeActions(workers, DwarvenMineWorker.Action.WORK);
}
public void endDay() {
for (DwarvenMineWorker worker : workers) {
worker.goHome();
worker.goToSleep();
}
makeActions(workers, DwarvenMineWorker.Action.GO_HOME, DwarvenMineWorker.Action.GO_TO_SLEEP);
}
private void makeActions(Collection<DwarvenMineWorker> workers, DwarvenMineWorker.Action... actions) {
for (DwarvenMineWorker worker : workers) {
worker.action(actions);
}
}
}

View File

@ -23,8 +23,40 @@ public abstract class DwarvenMineWorker {
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
}
}