From 7512c2a796b6ceb8ca0525c279c7554515e06198 Mon Sep 17 00:00:00 2001 From: JalenH Date: Wed, 17 Jan 2024 19:18:18 -0500 Subject: [PATCH 1/4] Creating and running test --- src/{ => ifs}/InsuranceCalculator.java | 2 +- test/ifs/InsuranceCalculatorTest.java | 29 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) rename src/{ => ifs}/InsuranceCalculator.java (96%) create mode 100644 test/ifs/InsuranceCalculatorTest.java 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..f851f7c 100644 --- a/src/InsuranceCalculator.java +++ b/src/ifs/InsuranceCalculator.java @@ -1,3 +1,4 @@ +package ifs; public class InsuranceCalculator { public double calculateInsurance(double income) { @@ -11,5 +12,4 @@ public double calculateInsurance(double income) { return (income-60000)*0.02+105600; } } - } diff --git a/test/ifs/InsuranceCalculatorTest.java b/test/ifs/InsuranceCalculatorTest.java new file mode 100644 index 0000000..e6e0c56 --- /dev/null +++ b/test/ifs/InsuranceCalculatorTest.java @@ -0,0 +1,29 @@ +package ifs; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + +public 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 504df1ed68f443363bdc7f6384fbca81216e79ce Mon Sep 17 00:00:00 2001 From: JalenH Date: Wed, 17 Jan 2024 19:36:04 -0500 Subject: [PATCH 2/4] Using the Extract Delegate refactoring --- src/ifs/InsuranceCalculator.java | 12 +++++++----- src/ifs/InsuranceStrategyVeryHigh.java | 13 +++++++++++++ test/ifs/InsuranceCalculatorTest.java | 2 +- 3 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 src/ifs/InsuranceStrategyVeryHigh.java diff --git a/src/ifs/InsuranceCalculator.java b/src/ifs/InsuranceCalculator.java index f851f7c..6fb9cd3 100644 --- a/src/ifs/InsuranceCalculator.java +++ b/src/ifs/InsuranceCalculator.java @@ -1,15 +1,17 @@ package ifs; public class InsuranceCalculator { + private final InsuranceStrategyVeryHigh insuranceStrategyVeryHigh = new InsuranceStrategyVeryHigh(this); + public double calculateInsurance(double income) { if (income <= 10000) { - return income*0.365; + return income * 0.365; } else if (income <= 30000) { - return (income-10000)*0.2+35600; + return (income - 10000) * 0.2 + 35600; } else if (income <= 60000) { - return (income-30000)*0.1+76500; + return (income - 30000) * 0.1 + 76500; } else { - return (income-60000)*0.02+105600; + return insuranceStrategyVeryHigh.calculateInsuranceVeryHigh(income); } } -} +} \ No newline at end of file diff --git a/src/ifs/InsuranceStrategyVeryHigh.java b/src/ifs/InsuranceStrategyVeryHigh.java new file mode 100644 index 0000000..cc26a29 --- /dev/null +++ b/src/ifs/InsuranceStrategyVeryHigh.java @@ -0,0 +1,13 @@ +package ifs; + +public class InsuranceStrategyVeryHigh { + private final InsuranceCalculator insuranceCalculator; + + public InsuranceStrategyVeryHigh(InsuranceCalculator insuranceCalculator) { + this.insuranceCalculator = insuranceCalculator; + } + + public double calculateInsuranceVeryHigh(double income) { + return (income - insuranceCalculator.getAdjustment()) * insuranceCalculator.getWeight() + insuranceCalculator.getConstant(); + } +} \ No newline at end of file diff --git a/test/ifs/InsuranceCalculatorTest.java b/test/ifs/InsuranceCalculatorTest.java index e6e0c56..090ee3e 100644 --- a/test/ifs/InsuranceCalculatorTest.java +++ b/test/ifs/InsuranceCalculatorTest.java @@ -2,7 +2,7 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; -public class InsuranceCalculatorTest { +class InsuranceCalculatorTest { @Test public void low() { assertEquals(1825, insuranceFor(5000), 0.01); From 6daf7bdfeed64cc9ce5bcfd7d4f2e53d83674f7a Mon Sep 17 00:00:00 2001 From: JalenH Date: Wed, 17 Jan 2024 19:43:54 -0500 Subject: [PATCH 3/4] Fine tuning --- src/ifs/InsuranceCalculator.java | 6 ++++-- src/ifs/InsuranceStrategy.java | 7 +++++++ src/ifs/InsuranceStrategyVeryHigh.java | 5 +---- 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 src/ifs/InsuranceStrategy.java diff --git a/src/ifs/InsuranceCalculator.java b/src/ifs/InsuranceCalculator.java index 6fb9cd3..cbcb480 100644 --- a/src/ifs/InsuranceCalculator.java +++ b/src/ifs/InsuranceCalculator.java @@ -1,9 +1,10 @@ package ifs; public class InsuranceCalculator { - private final InsuranceStrategyVeryHigh insuranceStrategyVeryHigh = new InsuranceStrategyVeryHigh(this); + private InsuranceStrategyVeryHigh strategy; public double calculateInsurance(double income) { + if (income <= 10000) { return income * 0.365; } else if (income <= 30000) { @@ -11,7 +12,8 @@ public double calculateInsurance(double income) { } else if (income <= 60000) { return (income - 30000) * 0.1 + 76500; } else { - return insuranceStrategyVeryHigh.calculateInsuranceVeryHigh(income); + strategy = new InsuranceStrategyVeryHigh(this); + return strategy.calculateInsuranceVeryHigh(income); } } } \ No newline at end of file diff --git a/src/ifs/InsuranceStrategy.java b/src/ifs/InsuranceStrategy.java new file mode 100644 index 0000000..4f21093 --- /dev/null +++ b/src/ifs/InsuranceStrategy.java @@ -0,0 +1,7 @@ +package ifs; + +public class InsuranceStrategy { + public double calculateInsuranceVeryHigh(double income) { + return (income - insuranceCalculator.getAdjustment()) * insuranceCalculator.getWeight() + insuranceCalculator.getConstant(); + } +} diff --git a/src/ifs/InsuranceStrategyVeryHigh.java b/src/ifs/InsuranceStrategyVeryHigh.java index cc26a29..ab5d211 100644 --- a/src/ifs/InsuranceStrategyVeryHigh.java +++ b/src/ifs/InsuranceStrategyVeryHigh.java @@ -1,13 +1,10 @@ package ifs; -public class InsuranceStrategyVeryHigh { +public class InsuranceStrategyVeryHigh extends InsuranceStrategy { private final InsuranceCalculator insuranceCalculator; public InsuranceStrategyVeryHigh(InsuranceCalculator insuranceCalculator) { this.insuranceCalculator = insuranceCalculator; } - public double calculateInsuranceVeryHigh(double income) { - return (income - insuranceCalculator.getAdjustment()) * insuranceCalculator.getWeight() + insuranceCalculator.getConstant(); - } } \ No newline at end of file From 5512a2c2a4f805aa1cb44b8924285e9a378880e1 Mon Sep 17 00:00:00 2001 From: JalenH Date: Wed, 17 Jan 2024 20:04:49 -0500 Subject: [PATCH 4/4] Implementing the abstract class --- src/ifs/InsuranceCalculator.java | 14 +++++++++----- src/ifs/InsuranceStrategy.java | 9 ++++++--- src/ifs/InsuranceStrategyHigh.java | 16 ++++++++++++++++ src/ifs/InsuranceStrategyLow.java | 16 ++++++++++++++++ src/ifs/InsuranceStrategyMedium.java | 16 ++++++++++++++++ src/ifs/InsuranceStrategyVeryHigh.java | 10 ++++++---- 6 files changed, 69 insertions(+), 12 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 cbcb480..5e8f1df 100644 --- a/src/ifs/InsuranceCalculator.java +++ b/src/ifs/InsuranceCalculator.java @@ -6,14 +6,18 @@ public class InsuranceCalculator { public double calculateInsurance(double income) { if (income <= 10000) { - return income * 0.365; + strategy = new InsuranceStrategyVeryHigh(); + return strategy.calculate(income); } else if (income <= 30000) { - return (income - 10000) * 0.2 + 35600; + strategy = new InsuranceStrategyVeryHigh(); + return strategy.calculate(income); } else if (income <= 60000) { - return (income - 30000) * 0.1 + 76500; + strategy = new InsuranceStrategyVeryHigh(); + return strategy.calculate(income); } else { - strategy = new InsuranceStrategyVeryHigh(this); - return strategy.calculateInsuranceVeryHigh(income); + strategy = new InsuranceStrategyVeryHigh(); + return strategy.calculate(income); } + } } \ No newline at end of file diff --git a/src/ifs/InsuranceStrategy.java b/src/ifs/InsuranceStrategy.java index 4f21093..875eaf1 100644 --- a/src/ifs/InsuranceStrategy.java +++ b/src/ifs/InsuranceStrategy.java @@ -1,7 +1,10 @@ package ifs; -public class InsuranceStrategy { - public double calculateInsuranceVeryHigh(double income) { - return (income - insuranceCalculator.getAdjustment()) * insuranceCalculator.getWeight() + insuranceCalculator.getConstant(); +public abstract class InsuranceStrategy { + public double calculate(double income) { + return (income - getAdjustment()) * getWeight() + getConstant(); } + public abstract int getConstant(); + public abstract double getWeight(); + public abstract int getAdjustment(); } diff --git a/src/ifs/InsuranceStrategyHigh.java b/src/ifs/InsuranceStrategyHigh.java new file mode 100644 index 0000000..7d4efaf --- /dev/null +++ b/src/ifs/InsuranceStrategyHigh.java @@ -0,0 +1,16 @@ +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..d563940 --- /dev/null +++ b/src/ifs/InsuranceStrategyLow.java @@ -0,0 +1,16 @@ +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..3c71f32 --- /dev/null +++ b/src/ifs/InsuranceStrategyMedium.java @@ -0,0 +1,16 @@ +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; + } +} diff --git a/src/ifs/InsuranceStrategyVeryHigh.java b/src/ifs/InsuranceStrategyVeryHigh.java index ab5d211..b3389ea 100644 --- a/src/ifs/InsuranceStrategyVeryHigh.java +++ b/src/ifs/InsuranceStrategyVeryHigh.java @@ -1,10 +1,12 @@ package ifs; public class InsuranceStrategyVeryHigh extends InsuranceStrategy { - private final InsuranceCalculator insuranceCalculator; + @Override + public int getConstant() {return 105600;} - public InsuranceStrategyVeryHigh(InsuranceCalculator insuranceCalculator) { - this.insuranceCalculator = insuranceCalculator; - } + @Override + public double getWeight() {return 0.02;} + @Override + public int getAdjustment() {return 60000;} } \ No newline at end of file