Skip to content

Commit

Permalink
Merge pull request #88 from Dmitry-Me/separateloop
Browse files Browse the repository at this point in the history
Loop implementation factored out into a separate class.
  • Loading branch information
emiln committed Aug 21, 2013
2 parents 9936dee + 34637f4 commit f06eb1a
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 12 deletions.
@@ -0,0 +1,40 @@
package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop;

import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.LoopComponentFactory;

public class LoopContext {

LoopInitializer myLoopInitializer;
LoopFinalizer myLoopFinalizer;
LoopCondition myLoopCondition;
LoopStep myLoopStep;
int myCurrentControlParameterValue;

public LoopContext(int nLoopControlParameterFinalValue) {
LoopComponentFactory myLoopComponentFactory = new LoopComponentFactory();
myLoopInitializer = myLoopComponentFactory.createLoopInitializer();
myLoopFinalizer = myLoopComponentFactory.createLoopFinalizer(nLoopControlParameterFinalValue);
myLoopCondition = myLoopComponentFactory.createLoopCondition();
myLoopStep = myLoopComponentFactory.createLoopStep();
}

public void start() {
myCurrentControlParameterValue =
myLoopInitializer.getLoopInitializationPoint();
}

public boolean shouldProceed() {
return myLoopCondition.evaluateLoop(myCurrentControlParameterValue,
myLoopFinalizer.getLoopFinalizationPoint());
}

public void proceed() {
myCurrentControlParameterValue =
myLoopStep.stepLoop(myCurrentControlParameterValue);
}

public int getControlParameter() {
return myCurrentControlParameterValue;
}

}
@@ -1,26 +1,18 @@
package com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.strategies;

import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.interfaces.strategies.FizzBuzzSolutionStrategy;
import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.factories.LoopComponentFactory;
import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop.LoopCondition;
import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop.LoopInitializer;
import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop.LoopStep;
import com.seriouscompany.business.java.fizzbuzz.packagenamingpackage.impl.loop.LoopContext;

public class EnterpriseGradeFizzBuzzSolutionStrategy implements FizzBuzzSolutionStrategy {

@Override
public void runSolution(int nFizzBuzzUpperLimit) {
LoopComponentFactory myLoopComponentFactory = new LoopComponentFactory();
LoopInitializer myLoopInitializer = myLoopComponentFactory.createLoopInitializer();
LoopFinalizer myLoopFinalizer = myLoopComponentFactory.createLoopFinalizer(nFizzBuzzUpperLimit);
LoopCondition myLoopCondition = myLoopComponentFactory.createLoopCondition();
LoopStep myLoopStep = myLoopComponentFactory.createLoopStep();

LoopContext loopContext = new LoopContext(nFizzBuzzUpperLimit);
SingleStepOutputGenerationStrategy myGenerationStrategy =
new SingleStepOutputGenerationStrategy();

for (int nCurrentNumber = myLoopInitializer.getLoopInitializationPoint(); myLoopCondition.evaluateLoop(nCurrentNumber, myLoopFinalizer.getLoopFinalizationPoint()); nCurrentNumber = myLoopStep.stepLoop(nCurrentNumber)) {
myGenerationStrategy.performGenerationForCurrentStep(nCurrentNumber);
for (loopContext.start(); loopContext.shouldProceed(); loopContext.proceed()) {
myGenerationStrategy.performGenerationForCurrentStep(loopContext.getControlParameter());
}
}
}

0 comments on commit f06eb1a

Please sign in to comment.