From 1fe1089e0a41f42170b3933c0c5d63b4ad1aaa21 Mon Sep 17 00:00:00 2001 From: pettr Date: Wed, 17 Jan 2024 20:11:32 -0500 Subject: [PATCH 1/6] Creating and running test --- RefactoringAssignment.iml | 10 ++++++++++ test/InsuranceCalculatorTest.java | 29 +++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 test/InsuranceCalculatorTest.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/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 7cd84329f60bc2d9b4480ec80ef113b6b391517f Mon Sep 17 00:00:00 2001 From: pettr Date: Wed, 17 Jan 2024 20:37:37 -0500 Subject: [PATCH 2/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..e86d571 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 4d4d74c18b748f120b5c495dad1365e722bb2e29 Mon Sep 17 00:00:00 2001 From: pettr Date: Wed, 17 Jan 2024 21:01:55 -0500 Subject: [PATCH 3/6] Using Extract Delegate refactoring --- src/InsuranceCalculator.java | 26 ++++++-------------------- src/InsuranceStrategyVeryHigh.java | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 20 deletions(-) create mode 100644 src/InsuranceStrategyVeryHigh.java diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index e86d571..e944e15 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,29 +1,15 @@ public class InsuranceCalculator { + private final InsuranceStrategyVeryHigh strategy = new InsuranceStrategyVeryHigh(); 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 calculateInsuranceVeryHigh(income); + return strategy.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; - } - -} - +} \ No newline at end of file diff --git a/src/InsuranceStrategyVeryHigh.java b/src/InsuranceStrategyVeryHigh.java new file mode 100644 index 0000000..63a9516 --- /dev/null +++ b/src/InsuranceStrategyVeryHigh.java @@ -0,0 +1,20 @@ +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; + } +} \ No newline at end of file From e90947d60243ee0b0b5fd9886ba213551d04082e Mon Sep 17 00:00:00 2001 From: pettr Date: Wed, 17 Jan 2024 21:14:53 -0500 Subject: [PATCH 4/6] Fine Tuning --- src/InsuranceCalculator.java | 12 ++++++++---- src/InsuranceStrategy.java | 11 +++++++++++ src/InsuranceStrategyHigh.java | 16 ++++++++++++++++ src/InsuranceStrategyLow.java | 16 ++++++++++++++++ src/InsuranceStrategyMedium.java | 16 ++++++++++++++++ src/InsuranceStrategyVeryHigh.java | 11 +++-------- 6 files changed, 70 insertions(+), 12 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 diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index e944e15..7cda457 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,14 +1,18 @@ public class InsuranceCalculator { - private final InsuranceStrategyVeryHigh strategy = new InsuranceStrategyVeryHigh(); public double calculateInsurance(double income) { + InsuranceStrategy strategy; if (income <= 10000) { - return income * 0.365; + strategy = new InsuranceStrategyLow(); + return strategy.calculateInsuranceVeryHigh(income); } else if (income <= 30000) { - return (income - 10000) * 0.2 + 35600; + strategy = new InsuranceStrategyMedium(); + return strategy.calculateInsuranceVeryHigh(income); } else if (income <= 60000) { - return (income - 30000) * 0.1 + 76500; + strategy = new InsuranceStrategyHigh(); + return strategy.calculateInsuranceVeryHigh(income); } else { + strategy = new InsuranceStrategyVeryHigh(); return strategy.calculateInsuranceVeryHigh(income); } } diff --git a/src/InsuranceStrategy.java b/src/InsuranceStrategy.java new file mode 100644 index 0000000..c5694f1 --- /dev/null +++ b/src/InsuranceStrategy.java @@ -0,0 +1,11 @@ +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(); +} \ No newline at end of file diff --git a/src/InsuranceStrategyHigh.java b/src/InsuranceStrategyHigh.java new file mode 100644 index 0000000..7a27397 --- /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; + } +} \ No newline at end of file diff --git a/src/InsuranceStrategyLow.java b/src/InsuranceStrategyLow.java new file mode 100644 index 0000000..34e6299 --- /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; + } +} \ No newline at end of file diff --git a/src/InsuranceStrategyMedium.java b/src/InsuranceStrategyMedium.java new file mode 100644 index 0000000..9922aab --- /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; + } +} \ No newline at end of file diff --git a/src/InsuranceStrategyVeryHigh.java b/src/InsuranceStrategyVeryHigh.java index 63a9516..2ceddb3 100644 --- a/src/InsuranceStrategyVeryHigh.java +++ b/src/InsuranceStrategyVeryHigh.java @@ -1,19 +1,14 @@ -public class InsuranceStrategyVeryHigh { - public InsuranceStrategyVeryHigh() { - } - - public double calculateInsuranceVeryHigh(double income) { - return (income - getAdjustment()) * getWeight() + getConstant(); - } - +public class InsuranceStrategyVeryHigh extends InsuranceStrategy { public int getConstant() { return 105600; } + @Override public double getWeight() { return 0.02; } + @Override public int getAdjustment() { return 60000; } From c5966e98f9c597ed0872a31e28c2737e2a541922 Mon Sep 17 00:00:00 2001 From: pettr Date: Wed, 17 Jan 2024 21:39:40 -0500 Subject: [PATCH 5/6] Implementing the abstract class --- src/InsuranceCalculator.java | 11 ++++++----- src/InsuranceStrategy.java | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index 7cda457..367f94d 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,19 +1,20 @@ public class InsuranceCalculator { + private InsuranceStrategy strategy; + public double calculateInsurance(double income) { - InsuranceStrategy strategy; if (income <= 10000) { strategy = new InsuranceStrategyLow(); - return strategy.calculateInsuranceVeryHigh(income); + return strategy.calculateInsurance(income); } else if (income <= 30000) { strategy = new InsuranceStrategyMedium(); - return strategy.calculateInsuranceVeryHigh(income); + return strategy.calculateInsurance(income); } else if (income <= 60000) { strategy = new InsuranceStrategyHigh(); - return strategy.calculateInsuranceVeryHigh(income); + return strategy.calculateInsurance(income); } else { strategy = new InsuranceStrategyVeryHigh(); - return strategy.calculateInsuranceVeryHigh(income); + return strategy.calculateInsurance(income); } } } \ No newline at end of file diff --git a/src/InsuranceStrategy.java b/src/InsuranceStrategy.java index c5694f1..58fce1b 100644 --- a/src/InsuranceStrategy.java +++ b/src/InsuranceStrategy.java @@ -1,5 +1,5 @@ public abstract class InsuranceStrategy { - public double calculateInsuranceVeryHigh(double income) { + public double calculateInsurance(double income) { return (income - getAdjustment()) * getWeight() + getConstant(); } From aa3d94858ccb680c8fd3215d771a5ff05680aac2 Mon Sep 17 00:00:00 2001 From: pettr Date: Wed, 17 Jan 2024 23:41:09 -0500 Subject: [PATCH 6/6] Happy end --- src/InsuranceCalculator.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index 367f94d..db2ddd1 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -17,4 +17,5 @@ public double calculateInsurance(double income) { return strategy.calculateInsurance(income); } } + } \ No newline at end of file