From 3cfc24f673723b4ef247e9d87a18f1a5c39ff5cc Mon Sep 17 00:00:00 2001 From: Ellie Bertke <89547461+epbertke@users.noreply.github.com> Date: Wed, 17 Jan 2024 17:32:24 -0500 Subject: [PATCH 1/6] Happy end --- RefactoringAssignment.iml | 10 ++++++++++ src/InsuranceCalculator.java | 20 ++++++++++++++------ src/InsuranceStrategy.java | 12 ++++++++++++ src/InsuranceStrategyHigh.java | 17 +++++++++++++++++ src/InsuranceStrategyLow.java | 18 ++++++++++++++++++ src/InsuranceStrategyMedium.java | 17 +++++++++++++++++ src/InsuranceStrategyVeryHigh.java | 19 +++++++++++++++++++ test/InsuranceTest.java | 29 +++++++++++++++++++++++++++++ 8 files changed, 136 insertions(+), 6 deletions(-) create mode 100644 src/InsuranceStrategy.java create mode 100644 src/InsuranceStrategyHigh.java create mode 100644 src/InsuranceStrategyLow.java create mode 100644 src/InsuranceStrategyMedium.java create mode 100644 src/InsuranceStrategyVeryHigh.java create mode 100644 test/InsuranceTest.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/InsuranceCalculator.java index 558e0a0..b224899 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,15 +1,23 @@ public class InsuranceCalculator { + private InsuranceStrategy strategy; + public double calculateInsurance(double income) { + if (income <= 10000) { - return income*0.365; - } else if (income <= 30000) { - return (income-10000)*0.2+35600; - } else if (income <= 60000) { - return (income-30000)*0.1+76500; + strategy = new InsuranceStrategyLow(); + return strategy.calculate(income); + } else if (income <= 36500) { + strategy = new InsuranceStrategyMedium(); + return strategy.calculate(income); + } else if (income <= 70000) { + strategy = new InsuranceStrategyHigh(); + return strategy.calculate(income); } else { - return (income-60000)*0.02+105600; + strategy = new InsuranceStrategyVeryHigh(); + return strategy.calculate(income); } } + } diff --git a/src/InsuranceStrategy.java b/src/InsuranceStrategy.java new file mode 100644 index 0000000..479fdac --- /dev/null +++ b/src/InsuranceStrategy.java @@ -0,0 +1,12 @@ + +public abstract class InsuranceStrategy { + public double calculate(double income) { + return (income - getAdjustment()) * getWeight() + getConstant(); + } + + abstract int getConstant(); + + abstract double getWeight(); + + abstract int getAdjustment(); +} diff --git a/src/InsuranceStrategyHigh.java b/src/InsuranceStrategyHigh.java new file mode 100644 index 0000000..6b387c4 --- /dev/null +++ b/src/InsuranceStrategyHigh.java @@ -0,0 +1,17 @@ +public class InsuranceStrategyHigh extends InsuranceStrategy { + public InsuranceStrategyHigh() {} + @Override + int getConstant() { + return 70000; + } + + @Override + double getWeight() { + return 0.18; + } + + @Override + int getAdjustment() { + return 25000; + } +} diff --git a/src/InsuranceStrategyLow.java b/src/InsuranceStrategyLow.java new file mode 100644 index 0000000..d645c83 --- /dev/null +++ b/src/InsuranceStrategyLow.java @@ -0,0 +1,18 @@ +public class InsuranceStrategyLow extends InsuranceStrategy { + public InsuranceStrategyLow() {} + + @Override + int getConstant() { + return 30000; + } + + @Override + double getWeight() { + return 0.36; + } + + @Override + int getAdjustment() { + return 5000; + } +} diff --git a/src/InsuranceStrategyMedium.java b/src/InsuranceStrategyMedium.java new file mode 100644 index 0000000..8750e9c --- /dev/null +++ b/src/InsuranceStrategyMedium.java @@ -0,0 +1,17 @@ +public class InsuranceStrategyMedium extends InsuranceStrategy { + public InsuranceStrategyMedium() {} + @Override + int getConstant() { + return 35600; + } + + @Override + double getWeight() { + return 0.2; + } + + @Override + int getAdjustment() { + return 10000; + } +} diff --git a/src/InsuranceStrategyVeryHigh.java b/src/InsuranceStrategyVeryHigh.java new file mode 100644 index 0000000..3bd82dc --- /dev/null +++ b/src/InsuranceStrategyVeryHigh.java @@ -0,0 +1,19 @@ +public class InsuranceStrategyVeryHigh extends InsuranceStrategy { + public InsuranceStrategyVeryHigh() { + } + + @Override + int getConstant() { + return 105600; + } + + @Override + double getWeight() { + return 0.02; + } + + @Override + int getAdjustment() { + return 60000; + } +} \ No newline at end of file diff --git a/test/InsuranceTest.java b/test/InsuranceTest.java new file mode 100644 index 0000000..09bcefc --- /dev/null +++ b/test/InsuranceTest.java @@ -0,0 +1,29 @@ +import org.junit.Test; + + import static org.junit.Assert.*; + public class InsuranceTest { + @Test + public void low() { + assertEquals(30000, insuranceFor(5000), 0.01); + } + + @Test + public void medium() { + assertEquals(38600, insuranceFor(25000), 0.01); + } + + @Test + public void high() { + assertEquals(74500, 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); + } + +} From 2d7f12c5526aeed8435025ac7987829b7b37e579 Mon Sep 17 00:00:00 2001 From: epbertke Date: Wed, 17 Jan 2024 21:05:31 -0500 Subject: [PATCH 2/6] Creating and running test --- .idea/misc.xml | 2 +- RefactoringAssignment.iml | 10 ++++++++++ test/InsuranceTest.java | 28 ++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 test/InsuranceTest.java diff --git a/.idea/misc.xml b/.idea/misc.xml index 0792e77..2c7c084 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file 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/test/InsuranceTest.java b/test/InsuranceTest.java new file mode 100644 index 0000000..68ae217 --- /dev/null +++ b/test/InsuranceTest.java @@ -0,0 +1,28 @@ +import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class InsuranceTest { + @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); + } +} From 589622f7a3bade7a06e57bf5b3c73f01b4f0f160 Mon Sep 17 00:00:00 2001 From: epbertke Date: Wed, 17 Jan 2024 21:07:47 -0500 Subject: [PATCH 3/6] Extracting methods --- src/InsuranceCalculator.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index 558e0a0..76d56ff 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -8,8 +8,22 @@ 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); } } + public double calculateInsuranceVeryHigh(double income) { + return (income- getAdjustment())* getWeight() + getConstant(); + } + public int getConstant() { + return 105600; + } + + public double getWeight() { + return 0.02; + } + public int getAdjustment() { + return 60000; + } + } From 76c623619d0f976ae9f83df8b88d563b77280f44 Mon Sep 17 00:00:00 2001 From: epbertke Date: Wed, 17 Jan 2024 21:11:33 -0500 Subject: [PATCH 4/6] Using the Extract Delegate refactoring --- src/InsuranceCalculator.java | 18 ++---------------- src/InsuranceStrategyVeryHigh.java | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 16 deletions(-) create mode 100644 src/InsuranceStrategyVeryHigh.java diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index 76d56ff..f5572bc 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,5 +1,5 @@ public class InsuranceCalculator { - + private final InsuranceStrategyVeryHigh insuranceStrategyVeryHigh = new InsuranceStrategyVeryHigh(); public double calculateInsurance(double income) { if (income <= 10000) { return income*0.365; @@ -8,22 +8,8 @@ public double calculateInsurance(double income) { } else if (income <= 60000) { return (income-30000)*0.1+76500; } else { - return calculateInsuranceVeryHigh(income); + return insuranceStrategyVeryHigh.calculateInsuranceVeryHigh(income); } } - public double calculateInsuranceVeryHigh(double income) { - return (income- getAdjustment())* getWeight() + getConstant(); - } - public int getConstant() { - return 105600; - } - - public double getWeight() { - return 0.02; - } - public int getAdjustment() { - return 60000; - } - } diff --git a/src/InsuranceStrategyVeryHigh.java b/src/InsuranceStrategyVeryHigh.java new file mode 100644 index 0000000..3842e8d --- /dev/null +++ b/src/InsuranceStrategyVeryHigh.java @@ -0,0 +1,15 @@ +public class InsuranceStrategyVeryHigh { + public InsuranceStrategyVeryHigh() { } + public double calculateInsuranceVeryHigh(double income) { + return (income - getAdjustment()) * getWeight() + getConstant(); + } + public int getConstant() { + return 105600; + } + public double getWeight() { + return 0.02; + } + public int getAdjustment() { + return 60000; + } +} From acb501bc35e2dcdfabfddae569e14e812453db41 Mon Sep 17 00:00:00 2001 From: epbertke Date: Wed, 17 Jan 2024 21:15:56 -0500 Subject: [PATCH 5/6] Fine tuning --- src/InsuranceCalculator.java | 5 +++-- src/InsuranceStrategy.java | 9 +++++++++ src/InsuranceStrategyVeryHigh.java | 9 +++++---- 3 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 src/InsuranceStrategy.java diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index f5572bc..0ef4cc2 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,5 +1,5 @@ public class InsuranceCalculator { - private final InsuranceStrategyVeryHigh insuranceStrategyVeryHigh = new InsuranceStrategyVeryHigh(); + private InsuranceStrategyVeryHigh strategy; public double calculateInsurance(double income) { if (income <= 10000) { return income*0.365; @@ -8,7 +8,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/InsuranceStrategy.java b/src/InsuranceStrategy.java new file mode 100644 index 0000000..24b0669 --- /dev/null +++ b/src/InsuranceStrategy.java @@ -0,0 +1,9 @@ +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/InsuranceStrategyVeryHigh.java b/src/InsuranceStrategyVeryHigh.java index 3842e8d..825a787 100644 --- a/src/InsuranceStrategyVeryHigh.java +++ b/src/InsuranceStrategyVeryHigh.java @@ -1,14 +1,15 @@ -public class InsuranceStrategyVeryHigh { +public class InsuranceStrategyVeryHigh extends InsuranceStrategy { public InsuranceStrategyVeryHigh() { } - public double calculateInsuranceVeryHigh(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 ea169db43374ffc5988ce8876731e55872bc9588 Mon Sep 17 00:00:00 2001 From: epbertke Date: Wed, 17 Jan 2024 21:27:18 -0500 Subject: [PATCH 6/6] Implementing the abstract class --- src/InsuranceCalculator.java | 19 +++++++++----- src/InsuranceStrategy.java | 2 +- src/InsuranceStrategyHigh.java | 13 ++++++++++ src/InsuranceStrategyLow.java | 16 ++++++++++++ src/InsuranceStrategyMedium.java | 15 +++++++++++ src/InsuranceStrategyVeryHigh.java | 1 - test/InsuranceTest.java | 41 +++++++++++++++--------------- 7 files changed, 78 insertions(+), 29 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 0ef4cc2..516ca40 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,16 +1,21 @@ public class InsuranceCalculator { - private InsuranceStrategyVeryHigh strategy; + private InsuranceStrategy strategy; public double calculateInsurance(double income) { + if (income <= 10000) { - return income*0.365; - } else if (income <= 30000) { - return (income-10000)*0.2+35600; - } else if (income <= 60000) { - return (income-30000)*0.1+76500; + strategy = new InsuranceStrategyLow(); + return strategy.calculate(income); + } else if (income <= 36500) { + strategy = new InsuranceStrategyMedium(); + return strategy.calculate(income); + } else if (income <= 70000) { + strategy = new InsuranceStrategyHigh(); + return strategy.calculate(income); } else { strategy = new InsuranceStrategyVeryHigh(); - return strategy.calculateInsuranceVeryHigh(income); + return strategy.calculate(income); } + } } diff --git a/src/InsuranceStrategy.java b/src/InsuranceStrategy.java index 24b0669..084e03a 100644 --- a/src/InsuranceStrategy.java +++ b/src/InsuranceStrategy.java @@ -1,5 +1,5 @@ public abstract class InsuranceStrategy { - public double calculateInsuranceVeryHigh(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..ad6bdfa --- /dev/null +++ b/src/InsuranceStrategyHigh.java @@ -0,0 +1,13 @@ +public class InsuranceStrategyHigh extends InsuranceStrategy { + public InsuranceStrategyHigh() { } + @Override + public int getConstant() { return 70000; } + + @Override + public double getWeight() { return 0.18; } + + @Override + public int getAdjustment() { + return 25000; + } +} diff --git a/src/InsuranceStrategyLow.java b/src/InsuranceStrategyLow.java new file mode 100644 index 0000000..576e0df --- /dev/null +++ b/src/InsuranceStrategyLow.java @@ -0,0 +1,16 @@ +public class InsuranceStrategyLow extends InsuranceStrategy { + public InsuranceStrategyLow() { } + + @Override + public int getConstant() { return 30000; } + + @Override + public double getWeight() { + return 0.36; + } + + @Override + public int getAdjustment() { + return 5000; + } +} diff --git a/src/InsuranceStrategyMedium.java b/src/InsuranceStrategyMedium.java new file mode 100644 index 0000000..f08fafe --- /dev/null +++ b/src/InsuranceStrategyMedium.java @@ -0,0 +1,15 @@ +public class InsuranceStrategyMedium extends InsuranceStrategy { + public InsuranceStrategyMedium() { } + @Override + public int getConstant() { return 35600; } + + @Override + public double getWeight() { + return 0.2; + } + + @Override + public int getAdjustment() { + return 10000; + } +} diff --git a/src/InsuranceStrategyVeryHigh.java b/src/InsuranceStrategyVeryHigh.java index 825a787..6bb4519 100644 --- a/src/InsuranceStrategyVeryHigh.java +++ b/src/InsuranceStrategyVeryHigh.java @@ -1,6 +1,5 @@ public class InsuranceStrategyVeryHigh extends InsuranceStrategy { public InsuranceStrategyVeryHigh() { } - @Override public int getConstant() { return 105600; diff --git a/test/InsuranceTest.java b/test/InsuranceTest.java index 68ae217..456c2db 100644 --- a/test/InsuranceTest.java +++ b/test/InsuranceTest.java @@ -1,28 +1,29 @@ import org.junit.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.Assert.*; public class InsuranceTest { - @Test - public void low() { - assertEquals(1825, insuranceFor(5000), 0.01); - } + @Test + public void low() { + assertEquals(30000, insuranceFor(5000), 0.01); + } - @Test - public void medium() { - assertEquals(38600, insuranceFor(25000), 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 high() { + assertEquals(74500, insuranceFor(50000), 0.01); + } - @Test - public void veryHigh() { - assertEquals(106400, insuranceFor(100_000), 0.01); - } + @Test + public void veryHigh() { + assertEquals(106400, insuranceFor(100_000), 0.01); + } + + private double insuranceFor(double income) { + return new InsuranceCalculator().calculateInsurance(income); + } - private double insuranceFor(double income) { - return new InsuranceCalculator().calculateInsurance(income); - } }