[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; package com.iluwatar;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
/** /**
@ -15,7 +16,7 @@ import java.util.List;
*/ */
public class DwarvenGoldmineFacade { public class DwarvenGoldmineFacade {
List<DwarvenMineWorker> workers; private final List<DwarvenMineWorker> workers;
public DwarvenGoldmineFacade() { public DwarvenGoldmineFacade() {
workers = new ArrayList<>(); workers = new ArrayList<>();
@ -25,23 +26,20 @@ public class DwarvenGoldmineFacade {
} }
public void startNewDay() { public void startNewDay() {
for (DwarvenMineWorker worker : workers) { makeActions(workers, DwarvenMineWorker.Action.WAKE_UP, DwarvenMineWorker.Action.GO_TO_MINE);
worker.wakeUp();
worker.goToMine();
}
} }
public void digOutGold() { public void digOutGold() {
for (DwarvenMineWorker worker : workers) { makeActions(workers, DwarvenMineWorker.Action.WORK);
worker.work();
}
} }
public void endDay() { public void endDay() {
for (DwarvenMineWorker worker : workers) { makeActions(workers, DwarvenMineWorker.Action.GO_HOME, DwarvenMineWorker.Action.GO_TO_SLEEP);
worker.goHome();
worker.goToSleep();
}
} }
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."); 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 void work();
public abstract String name(); public abstract String name();
static enum Action {
GO_TO_SLEEP, WAKE_UP, GO_HOME, GO_TO_MINE, WORK
}
} }