From ebbdd77fb6ca2996bd7ce1dda212fabafa2bacb5 Mon Sep 17 00:00:00 2001 From: connorvessely <111907690+connorvessely@users.noreply.github.com> Date: Wed, 17 Jan 2024 15:00:27 -0500 Subject: [PATCH 1/6] Creating and running test --- test/EMPTY | 0 test/InsuranceCalculatorTest.java | 29 +++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) delete mode 100644 test/EMPTY create mode 100644 test/InsuranceCalculatorTest.java diff --git a/test/EMPTY b/test/EMPTY deleted file mode 100644 index e69de29..0000000 diff --git a/test/InsuranceCalculatorTest.java b/test/InsuranceCalculatorTest.java new file mode 100644 index 0000000..5b3cc5a --- /dev/null +++ b/test/InsuranceCalculatorTest.java @@ -0,0 +1,29 @@ +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class InsuranceCalculatorTest { + @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 9f2edea82a1ae768a20ea3d7132bacd163531e93 Mon Sep 17 00:00:00 2001 From: connorvessely <111907690+connorvessely@users.noreply.github.com> Date: Wed, 17 Jan 2024 15:06:25 -0500 Subject: [PATCH 2/6] Extracting methods --- src/InsuranceCalculator.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index 558e0a0..51a7f05 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -8,8 +8,24 @@ public double calculateInsurance(double income) { } else if (income <= 60000) { return (income-30000)*0.1+76500; } else { - return (income-60000)*0.02+105600; + return calculateVeryHighInsurance(income); } } + private double calculateVeryHighInsurance(double income) { + return (income - getAdjustment()) * getWeight() + getConstant(); + } + + private int getConstant() { + return 105600; + } + + private double getWeight() { + return 0.02; + } + + private int getAdjustment() { + return 60000; + } + } From 287de53c4ca7ec2ef5d328d259a734972aa435d5 Mon Sep 17 00:00:00 2001 From: connorvessely <111907690+connorvessely@users.noreply.github.com> Date: Wed, 17 Jan 2024 15:13:25 -0500 Subject: [PATCH 3/6] Using the Extract Delegate refactoring --- src/InsuranceCalculator.java | 21 +++------------------ src/InsuranceStrategyVeryHigh.java | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 18 deletions(-) create mode 100644 src/InsuranceStrategyVeryHigh.java diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index 51a7f05..e298f4a 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,5 +1,7 @@ public class InsuranceCalculator { + private final InsuranceStrategyVeryHigh insuranceStrategyVeryHigh = new InsuranceStrategyVeryHigh(); + public double calculateInsurance(double income) { if (income <= 10000) { return income*0.365; @@ -8,24 +10,7 @@ public double calculateInsurance(double income) { } else if (income <= 60000) { return (income-30000)*0.1+76500; } else { - return calculateVeryHighInsurance(income); + return insuranceStrategyVeryHigh.calculateVeryHighInsurance(income); } } - - private double calculateVeryHighInsurance(double income) { - return (income - getAdjustment()) * getWeight() + getConstant(); - } - - private int getConstant() { - return 105600; - } - - private double getWeight() { - return 0.02; - } - - private int getAdjustment() { - return 60000; - } - } diff --git a/src/InsuranceStrategyVeryHigh.java b/src/InsuranceStrategyVeryHigh.java new file mode 100644 index 0000000..85759f8 --- /dev/null +++ b/src/InsuranceStrategyVeryHigh.java @@ -0,0 +1,20 @@ +public class InsuranceStrategyVeryHigh { + public InsuranceStrategyVeryHigh() { + } + + public double calculateVeryHighInsurance(double income) { + return (income - getAdjustment()) * getWeight() + getConstant(); + } + + public int getConstant() { + return 105600; + } + + public double getWeight() { + return 0.02; + } + + public int getAdjustment() { + return 60000; + } +} \ No newline at end of file From a5a4dca978abde2b2e0a78c207ab2ae6e443025c Mon Sep 17 00:00:00 2001 From: connorvessely <111907690+connorvessely@users.noreply.github.com> Date: Wed, 17 Jan 2024 15:20:38 -0500 Subject: [PATCH 4/6] Fine tuning --- src/InsuranceCalculator.java | 5 +++-- src/InsuranceStrategy.java | 11 +++++++++++ src/InsuranceStrategyVeryHigh.java | 9 ++++----- 3 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 src/InsuranceStrategy.java diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index e298f4a..2dcf8bb 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,6 +1,6 @@ public class InsuranceCalculator { - private final InsuranceStrategyVeryHigh insuranceStrategyVeryHigh = new InsuranceStrategyVeryHigh(); + private InsuranceStrategyVeryHigh strategy; public double calculateInsurance(double income) { if (income <= 10000) { @@ -10,7 +10,8 @@ public double calculateInsurance(double income) { } else if (income <= 60000) { return (income-30000)*0.1+76500; } else { - return insuranceStrategyVeryHigh.calculateVeryHighInsurance(income); + strategy = new InsuranceStrategyVeryHigh(); + return strategy.calculateVeryHighInsurance(income); } } } diff --git a/src/InsuranceStrategy.java b/src/InsuranceStrategy.java new file mode 100644 index 0000000..481101d --- /dev/null +++ b/src/InsuranceStrategy.java @@ -0,0 +1,11 @@ +public abstract class InsuranceStrategy { + public double calculateVeryHighInsurance(double income) { + return (income - getAdjustment()) * getWeight() + getConstant(); + } + + public abstract int getConstant(); + + public abstract double getWeight(); + + public abstract int getAdjustment(); +} diff --git a/src/InsuranceStrategyVeryHigh.java b/src/InsuranceStrategyVeryHigh.java index 85759f8..81cf8a4 100644 --- a/src/InsuranceStrategyVeryHigh.java +++ b/src/InsuranceStrategyVeryHigh.java @@ -1,19 +1,18 @@ -public class InsuranceStrategyVeryHigh { +public class InsuranceStrategyVeryHigh extends InsuranceStrategy { public InsuranceStrategyVeryHigh() { } - public double calculateVeryHighInsurance(double income) { - return (income - getAdjustment()) * getWeight() + getConstant(); - } - + @Override public int getConstant() { return 105600; } + @Override public double getWeight() { return 0.02; } + @Override public int getAdjustment() { return 60000; } From 68a5fc408d8e4bde4644ae4d543f6e9035107309 Mon Sep 17 00:00:00 2001 From: connorvessely <111907690+connorvessely@users.noreply.github.com> Date: Wed, 17 Jan 2024 15:30:40 -0500 Subject: [PATCH 5/6] Implementing the abstract class --- src/InsuranceCalculator.java | 13 ++++++++----- src/InsuranceStrategy.java | 2 +- src/InsuranceStrategyHigh.java | 16 ++++++++++++++++ src/InsuranceStrategyLow.java | 16 ++++++++++++++++ src/InsuranceStrategyMedium.java | 16 ++++++++++++++++ 5 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 src/InsuranceStrategyHigh.java create mode 100644 src/InsuranceStrategyLow.java create mode 100644 src/InsuranceStrategyMedium.java diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index 2dcf8bb..1d3b3bf 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,17 +1,20 @@ public class InsuranceCalculator { - private 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.calculateVeryHighInsurance(income); + return strategy.calculate(income); } } } diff --git a/src/InsuranceStrategy.java b/src/InsuranceStrategy.java index 481101d..1ebf362 100644 --- a/src/InsuranceStrategy.java +++ b/src/InsuranceStrategy.java @@ -1,5 +1,5 @@ public abstract class InsuranceStrategy { - public double calculateVeryHighInsurance(double income) { + public double calculate(double income) { return (income - getAdjustment()) * getWeight() + getConstant(); } diff --git a/src/InsuranceStrategyHigh.java b/src/InsuranceStrategyHigh.java new file mode 100644 index 0000000..e316b15 --- /dev/null +++ b/src/InsuranceStrategyHigh.java @@ -0,0 +1,16 @@ +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/InsuranceStrategyLow.java b/src/InsuranceStrategyLow.java new file mode 100644 index 0000000..58278e8 --- /dev/null +++ b/src/InsuranceStrategyLow.java @@ -0,0 +1,16 @@ +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/InsuranceStrategyMedium.java b/src/InsuranceStrategyMedium.java new file mode 100644 index 0000000..6994a01 --- /dev/null +++ b/src/InsuranceStrategyMedium.java @@ -0,0 +1,16 @@ +public class InsuranceStrategyMedium extends InsuranceStrategy { + @Override + public int getConstant() { + return 35600; + } + + @Override + public double getWeight() { + return 0.2; + } + + @Override + public int getAdjustment() { + return 10000; + } +} From a4b6ca838079ce4662abb6f60255d9c17c7169e0 Mon Sep 17 00:00:00 2001 From: connorvessely <111907690+connorvessely@users.noreply.github.com> Date: Wed, 17 Jan 2024 20:55:55 -0500 Subject: [PATCH 6/6] Bonus completed --- src/InsuranceCalculator.java | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index 1d3b3bf..3c89e4c 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,20 +1,25 @@ +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + public class InsuranceCalculator { private InsuranceStrategy strategy; public double calculateInsurance(double income) { - if (income <= 10000) { - strategy = new InsuranceStrategyLow(); - return strategy.calculate(income); - } else if (income <= 30000) { - strategy = new InsuranceStrategyMedium(); - return strategy.calculate(income); - } else if (income <= 60000) { - strategy = new InsuranceStrategyHigh(); - return strategy.calculate(income); - } else { - strategy = new InsuranceStrategyVeryHigh(); - return strategy.calculate(income); - } + strategy = getStrategy(income); + return strategy.calculate(income); + } + + List strategies = Arrays.asList(new InsuranceStrategyLow(), + new InsuranceStrategyMedium(), new InsuranceStrategyMedium(), + new InsuranceStrategyHigh(), new InsuranceStrategyHigh(), new InsuranceStrategyHigh(), + new InsuranceStrategyVeryHigh()); + + private InsuranceStrategy getStrategy(double income){ + double dividing = income/10000.00001; + int result = (int) dividing; + int index = Math.min(result, 6); + return strategies.get(index); } }