From 34637f456c6084447a1b91bca41cbbe4c178310c Mon Sep 17 00:00:00 2001 From: Dmitry-Me Date: Tue, 20 Aug 2013 13:24:43 +0400 Subject: [PATCH] Loop implementation factored out into a separate class. --- .../impl/loop/LoopContext.java | 40 +++++++++++++++++++ ...terpriseGradeFizzBuzzSolutionStrategy.java | 16 ++------ 2 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/seriouscompany/business/java/fizzbuzz/packagenamingpackage/impl/loop/LoopContext.java diff --git a/src/main/java/com/seriouscompany/business/java/fizzbuzz/packagenamingpackage/impl/loop/LoopContext.java b/src/main/java/com/seriouscompany/business/java/fizzbuzz/packagenamingpackage/impl/loop/LoopContext.java new file mode 100644 index 00000000..348ee827 --- /dev/null +++ b/src/main/java/com/seriouscompany/business/java/fizzbuzz/packagenamingpackage/impl/loop/LoopContext.java @@ -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; + } + +} diff --git a/src/main/java/com/seriouscompany/business/java/fizzbuzz/packagenamingpackage/impl/strategies/EnterpriseGradeFizzBuzzSolutionStrategy.java b/src/main/java/com/seriouscompany/business/java/fizzbuzz/packagenamingpackage/impl/strategies/EnterpriseGradeFizzBuzzSolutionStrategy.java index 37693be9..e4d7cc9e 100644 --- a/src/main/java/com/seriouscompany/business/java/fizzbuzz/packagenamingpackage/impl/strategies/EnterpriseGradeFizzBuzzSolutionStrategy.java +++ b/src/main/java/com/seriouscompany/business/java/fizzbuzz/packagenamingpackage/impl/strategies/EnterpriseGradeFizzBuzzSolutionStrategy.java @@ -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()); } } }