From 778e6e72c74c94f86f1406f4055efb7b0597e273 Mon Sep 17 00:00:00 2001 From: MichaelaWalker <112041868+MichaelaWalker@users.noreply.github.com> Date: Wed, 17 Jan 2024 18:39:49 -0500 Subject: [PATCH 1/5] Creating and running test --- RefactoringAssignment.iml | 10 ++++++++ src/{ => ifs}/InsuranceCalculator.java | 2 ++ test/ifs/IfElseDemoTest.java | 32 ++++++++++++++++++++++++++ 3 files changed, 44 insertions(+) rename src/{ => ifs}/InsuranceCalculator.java (96%) create mode 100644 test/ifs/IfElseDemoTest.java diff --git a/RefactoringAssignment.iml b/RefactoringAssignment.iml index 7e880ab..454125c 100644 --- a/RefactoringAssignment.iml +++ b/RefactoringAssignment.iml @@ -24,5 +24,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/InsuranceCalculator.java b/src/ifs/InsuranceCalculator.java similarity index 96% rename from src/InsuranceCalculator.java rename to src/ifs/InsuranceCalculator.java index 558e0a0..a5b8b80 100644 --- a/src/InsuranceCalculator.java +++ b/src/ifs/InsuranceCalculator.java @@ -1,3 +1,5 @@ +package ifs; + public class InsuranceCalculator { public double calculateInsurance(double income) { diff --git a/test/ifs/IfElseDemoTest.java b/test/ifs/IfElseDemoTest.java new file mode 100644 index 0000000..84b91fc --- /dev/null +++ b/test/ifs/IfElseDemoTest.java @@ -0,0 +1,32 @@ +package ifs; + +import org.junit.Test; + +import static org.junit.Assert.*; + +public class IfElseDemoTest { + @Test + public void low() { + assertEquals(1825, insuranceFor(5000), 0.01); + } + + @Test + public void medium() { + assertEquals(38600, insuranceFor(25000), 0.01); + } + + @Test + public void high() { + assertEquals(78500, insuranceFor(50000), 0.01); + } + + @Test + public void veryHigh() { + assertEquals(106400, insuranceFor(100_000), 0.01); + } + + private double insuranceFor(double income) { + return new InsuranceCalculator().calculateInsurance(income); + } + +} \ No newline at end of file From 8bc8381c85a0b63e16dacc6e55974842ba0f238e Mon Sep 17 00:00:00 2001 From: MichaelaWalker <112041868+MichaelaWalker@users.noreply.github.com> Date: Wed, 17 Jan 2024 18:51:42 -0500 Subject: [PATCH 2/5] Extracting methods --- src/ifs/InsuranceCalculator.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/ifs/InsuranceCalculator.java b/src/ifs/InsuranceCalculator.java index a5b8b80..6f9ae2d 100644 --- a/src/ifs/InsuranceCalculator.java +++ b/src/ifs/InsuranceCalculator.java @@ -10,8 +10,24 @@ public double calculateInsurance(double income) { } else if (income <= 60000) { return (income-30000)*0.1+76500; } else { - return (income-60000)*0.02+105600; + return calculateInsuranceVeryHigh(income); } } + private static double calculateInsuranceVeryHigh(double income) { + return (income - getAdjustment()) * getWeight() + getConstant(); + } + + private static int getConstant() { + return 105600; + } + + private static double getWeight() { + return 0.02; + } + + private static int getAdjustment() { + return 60000; + } + } From c12e4df89759225f9be27557bf93897fe2a852b0 Mon Sep 17 00:00:00 2001 From: MichaelaWalker <112041868+MichaelaWalker@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:03:23 -0500 Subject: [PATCH 3/5] Using extract delegate refactoring --- src/ifs/InsuranceCalculator.java | 21 +++------------------ src/ifs/InsuranceStrategyVeryHigh.java | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 18 deletions(-) create mode 100644 src/ifs/InsuranceStrategyVeryHigh.java diff --git a/src/ifs/InsuranceCalculator.java b/src/ifs/InsuranceCalculator.java index 6f9ae2d..6ee7014 100644 --- a/src/ifs/InsuranceCalculator.java +++ b/src/ifs/InsuranceCalculator.java @@ -2,6 +2,8 @@ public class InsuranceCalculator { + private final InsuranceStrategyVeryHigh insuranceStrategyVeryHigh = new InsuranceStrategyVeryHigh(); + public double calculateInsurance(double income) { if (income <= 10000) { return income*0.365; @@ -10,24 +12,7 @@ public double calculateInsurance(double income) { } else if (income <= 60000) { return (income-30000)*0.1+76500; } else { - return calculateInsuranceVeryHigh(income); + return InsuranceStrategyVeryHigh.calculateInsuranceVeryHigh(income); } } - - private static double calculateInsuranceVeryHigh(double income) { - return (income - getAdjustment()) * getWeight() + getConstant(); - } - - private static int getConstant() { - return 105600; - } - - private static double getWeight() { - return 0.02; - } - - private static int getAdjustment() { - return 60000; - } - } diff --git a/src/ifs/InsuranceStrategyVeryHigh.java b/src/ifs/InsuranceStrategyVeryHigh.java new file mode 100644 index 0000000..a406bed --- /dev/null +++ b/src/ifs/InsuranceStrategyVeryHigh.java @@ -0,0 +1,21 @@ +package ifs; + +public class InsuranceStrategyVeryHigh { + public InsuranceStrategyVeryHigh() { + } + public static double calculateInsuranceVeryHigh(double income) { + return (income - getAdjustment()) * getWeight() + getConstant(); + } + + static int getConstant() { + return 105600; + } + + static double getWeight() { + return 0.02; + } + + static int getAdjustment() { + return 60000; + } +} \ No newline at end of file From e54602796f55a152eb764c4ca3b35bb0aaf53876 Mon Sep 17 00:00:00 2001 From: MichaelaWalker <112041868+MichaelaWalker@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:40:06 -0500 Subject: [PATCH 4/5] Fine tuning --- src/ifs/InsuranceCalculator.java | 6 +++--- src/ifs/InsuranceStrategy.java | 13 +++++++++++++ src/ifs/InsuranceStrategyVeryHigh.java | 14 +++++++------- 3 files changed, 23 insertions(+), 10 deletions(-) create mode 100644 src/ifs/InsuranceStrategy.java diff --git a/src/ifs/InsuranceCalculator.java b/src/ifs/InsuranceCalculator.java index 6ee7014..6cd7c25 100644 --- a/src/ifs/InsuranceCalculator.java +++ b/src/ifs/InsuranceCalculator.java @@ -1,8 +1,7 @@ package ifs; public class InsuranceCalculator { - - private final InsuranceStrategyVeryHigh insuranceStrategyVeryHigh = new InsuranceStrategyVeryHigh(); + InsuranceStrategyVeryHigh strategy; public double calculateInsurance(double income) { if (income <= 10000) { @@ -12,7 +11,8 @@ public double calculateInsurance(double income) { } else if (income <= 60000) { return (income-30000)*0.1+76500; } else { - return InsuranceStrategyVeryHigh.calculateInsuranceVeryHigh(income); + strategy = new InsuranceStrategyVeryHigh(); + return strategy.calculateInsuranceVeryHigh(income); } } } diff --git a/src/ifs/InsuranceStrategy.java b/src/ifs/InsuranceStrategy.java new file mode 100644 index 0000000..4762658 --- /dev/null +++ b/src/ifs/InsuranceStrategy.java @@ -0,0 +1,13 @@ +package ifs; + +public abstract class InsuranceStrategy { + public double calculateInsuranceVeryHigh(double income) { + return (income - getAdjustment()) * getWeight() + getConstant(); + } + + public abstract int getConstant(); + + public abstract double getWeight(); + + public abstract int getAdjustment(); +} diff --git a/src/ifs/InsuranceStrategyVeryHigh.java b/src/ifs/InsuranceStrategyVeryHigh.java index a406bed..d652aaf 100644 --- a/src/ifs/InsuranceStrategyVeryHigh.java +++ b/src/ifs/InsuranceStrategyVeryHigh.java @@ -1,21 +1,21 @@ package ifs; -public class InsuranceStrategyVeryHigh { +public class InsuranceStrategyVeryHigh extends InsuranceStrategy { public InsuranceStrategyVeryHigh() { } - public static double calculateInsuranceVeryHigh(double income) { - return (income - getAdjustment()) * getWeight() + getConstant(); - } - static int getConstant() { + @Override + public int getConstant() { return 105600; } - static double getWeight() { + @Override + public double getWeight() { return 0.02; } - static int getAdjustment() { + @Override + public int getAdjustment(){ return 60000; } } \ No newline at end of file From 588c2852af49a125944ee00fe5a69f3d0f37dabb Mon Sep 17 00:00:00 2001 From: MichaelaWalker <112041868+MichaelaWalker@users.noreply.github.com> Date: Wed, 17 Jan 2024 21:02:42 -0500 Subject: [PATCH 5/5] Implementing abstract class --- src/ifs/InsuranceCalculator.java | 13 ++++++++----- src/ifs/InsuranceStrategy.java | 2 +- src/ifs/InsuranceStrategyHigh.java | 18 ++++++++++++++++++ src/ifs/InsuranceStrategyLow.java | 18 ++++++++++++++++++ src/ifs/InsuranceStrategyMedium.java | 18 ++++++++++++++++++ 5 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 src/ifs/InsuranceStrategyHigh.java create mode 100644 src/ifs/InsuranceStrategyLow.java create mode 100644 src/ifs/InsuranceStrategyMedium.java diff --git a/src/ifs/InsuranceCalculator.java b/src/ifs/InsuranceCalculator.java index 6cd7c25..db5d7dc 100644 --- a/src/ifs/InsuranceCalculator.java +++ b/src/ifs/InsuranceCalculator.java @@ -1,18 +1,21 @@ package ifs; public class InsuranceCalculator { - InsuranceStrategyVeryHigh strategy; + private InsuranceStrategy strategy; public double calculateInsurance(double income) { if (income <= 10000) { - return income*0.365; + strategy = new InsuranceStrategyLow(); + return strategy.calculate(income); } else if (income <= 30000) { - return (income-10000)*0.2+35600; + strategy = new InsuranceStrategyMedium(); + return strategy.calculate(income); } else if (income <= 60000) { - return (income-30000)*0.1+76500; + strategy = new InsuranceStrategyHigh(); + return strategy.calculate(income); } else { strategy = new InsuranceStrategyVeryHigh(); - return strategy.calculateInsuranceVeryHigh(income); + return strategy.calculate(income); } } } diff --git a/src/ifs/InsuranceStrategy.java b/src/ifs/InsuranceStrategy.java index 4762658..82bd3b3 100644 --- a/src/ifs/InsuranceStrategy.java +++ b/src/ifs/InsuranceStrategy.java @@ -1,7 +1,7 @@ package ifs; public abstract class InsuranceStrategy { - public double calculateInsuranceVeryHigh(double income) { + public double calculate(double income) { return (income - getAdjustment()) * getWeight() + getConstant(); } diff --git a/src/ifs/InsuranceStrategyHigh.java b/src/ifs/InsuranceStrategyHigh.java new file mode 100644 index 0000000..4b61c16 --- /dev/null +++ b/src/ifs/InsuranceStrategyHigh.java @@ -0,0 +1,18 @@ +package ifs; + +public class InsuranceStrategyHigh extends InsuranceStrategy { + @Override + public int getConstant() { + return 76500; + } + + @Override + public double getWeight() { + return 0.1; + } + + @Override + public int getAdjustment() { + return 30000; + } +} diff --git a/src/ifs/InsuranceStrategyLow.java b/src/ifs/InsuranceStrategyLow.java new file mode 100644 index 0000000..66b71be --- /dev/null +++ b/src/ifs/InsuranceStrategyLow.java @@ -0,0 +1,18 @@ +package ifs; + +public class InsuranceStrategyLow extends InsuranceStrategy { + @Override + public int getConstant() { + return 0; + } + + @Override + public double getWeight() { + return 0.365; + } + + @Override + public int getAdjustment() { + return 0; + } +} diff --git a/src/ifs/InsuranceStrategyMedium.java b/src/ifs/InsuranceStrategyMedium.java new file mode 100644 index 0000000..49d4fa5 --- /dev/null +++ b/src/ifs/InsuranceStrategyMedium.java @@ -0,0 +1,18 @@ +package ifs; + +public class InsuranceStrategyMedium extends InsuranceStrategy { + @Override + public int getConstant() { + return 35600; + } + + @Override + public double getWeight() { + return 0.2; + } + + @Override + public int getAdjustment() { + return 10000; + } +}