From b1304be8998d22a6082da9f0219bc94e80c24a0a Mon Sep 17 00:00:00 2001 From: DennisRBeaver Date: Fri, 19 Jan 2024 17:17:53 -0500 Subject: [PATCH 1/5] Creating and running test --- .idea/misc.xml | 2 +- RefactoringAssignment.iml | 10 ++++++++++ test/TestDemo.java | 27 +++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 test/TestDemo.java diff --git a/.idea/misc.xml b/.idea/misc.xml index 0792e77..60fc35e 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/TestDemo.java b/test/TestDemo.java new file mode 100644 index 0000000..541ae4a --- /dev/null +++ b/test/TestDemo.java @@ -0,0 +1,27 @@ +import org.junit.Test; +import static org.junit.Assert.*; +public class TestDemo { + @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 85ed1cced85515f75776acef89480ea394457244 Mon Sep 17 00:00:00 2001 From: DennisRBeaver Date: Fri, 19 Jan 2024 17:23:24 -0500 Subject: [PATCH 2/5] Extracting methods --- src/InsuranceCalculator.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index 558e0a0..0b51d31 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -8,8 +8,20 @@ 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; + } +} \ No newline at end of file From ad0b692a2911fd23fd2619eba301c0d9d25446d6 Mon Sep 17 00:00:00 2001 From: DennisRBeaver Date: Fri, 19 Jan 2024 17:28:36 -0500 Subject: [PATCH 3/5] Using the Extract Delegate refactoring --- src/InsuranceCalculator.java | 17 +++-------------- src/InsuranceStrategyVeryHigh.java | 20 ++++++++++++++++++++ test/EMPTY | 0 3 files changed, 23 insertions(+), 14 deletions(-) create mode 100644 src/InsuranceStrategyVeryHigh.java delete mode 100644 test/EMPTY diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index 0b51d31..5d3360a 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,20 +10,7 @@ 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; - } } \ 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 diff --git a/test/EMPTY b/test/EMPTY deleted file mode 100644 index e69de29..0000000 From b70dd1130bb2723886a53c1c3139a14973a8761d Mon Sep 17 00:00:00 2001 From: DennisRBeaver Date: Fri, 19 Jan 2024 17:35:31 -0500 Subject: [PATCH 4/5] Fine tuning --- src/InsuranceCalculator.java | 8 ++++++-- src/InsuranceStrategy.java | 12 ++++++++++++ src/InsuranceStrategyVeryHigh.java | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 src/InsuranceStrategy.java diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index 5d3360a..a240799 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,8 +1,10 @@ public class InsuranceCalculator { - private final InsuranceStrategyVeryHigh insuranceStrategyVeryHigh = new InsuranceStrategyVeryHigh(); + private InsuranceStrategyVeryHigh strategy; public double calculateInsurance(double income) { + + if (income <= 10000) { return income*0.365; } else if (income <= 30000) { @@ -10,7 +12,9 @@ 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); } + } } \ No newline at end of file diff --git a/src/InsuranceStrategy.java b/src/InsuranceStrategy.java new file mode 100644 index 0000000..08bd348 --- /dev/null +++ b/src/InsuranceStrategy.java @@ -0,0 +1,12 @@ +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/InsuranceStrategyVeryHigh.java b/src/InsuranceStrategyVeryHigh.java index 63a9516..7e527da 100644 --- a/src/InsuranceStrategyVeryHigh.java +++ b/src/InsuranceStrategyVeryHigh.java @@ -1,4 +1,4 @@ -public class InsuranceStrategyVeryHigh { +public class InsuranceStrategyVeryHigh extends InsuranceStrategy { public InsuranceStrategyVeryHigh() { } From 8e3aa01e62b3e73b9a6697d0585bcc09efe10343 Mon Sep 17 00:00:00 2001 From: DennisRBeaver Date: Fri, 19 Jan 2024 17:52:59 -0500 Subject: [PATCH 5/5] Implementing the abstract class --- src/InsuranceCalculator.java | 11 +++++++---- src/InsuranceStrategyHigh.java | 16 ++++++++++++++++ src/InsuranceStrategyLow.java | 16 ++++++++++++++++ src/InsuranceStrategyMedium.java | 16 ++++++++++++++++ src/InsuranceStrategyVeryHigh.java | 2 +- src/{InsuranceStrategy.java => calculate.java} | 2 +- 6 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 src/InsuranceStrategyHigh.java create mode 100644 src/InsuranceStrategyLow.java create mode 100644 src/InsuranceStrategyMedium.java rename src/{InsuranceStrategy.java => calculate.java} (86%) diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index a240799..46a3744 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,16 +1,19 @@ public class InsuranceCalculator { - private InsuranceStrategyVeryHigh strategy; + private calculate strategy; public double calculateInsurance(double income) { 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/InsuranceStrategyHigh.java b/src/InsuranceStrategyHigh.java new file mode 100644 index 0000000..ee7b66c --- /dev/null +++ b/src/InsuranceStrategyHigh.java @@ -0,0 +1,16 @@ +public class InsuranceStrategyHigh extends calculate { + @Override + public int getConstant() { + return 78500; + } + + @Override + public double getWeight() { + return 0.04; + } + + @Override + public int getAdjustment() { + return 50000; + } +} diff --git a/src/InsuranceStrategyLow.java b/src/InsuranceStrategyLow.java new file mode 100644 index 0000000..4db3f33 --- /dev/null +++ b/src/InsuranceStrategyLow.java @@ -0,0 +1,16 @@ +public class InsuranceStrategyLow extends calculate { + @Override + public int getConstant() { + return 1825; + } + + @Override + public double getWeight() { + return 0.05; + } + + @Override + public int getAdjustment() { + return 5000; + } +} diff --git a/src/InsuranceStrategyMedium.java b/src/InsuranceStrategyMedium.java new file mode 100644 index 0000000..19cbcf3 --- /dev/null +++ b/src/InsuranceStrategyMedium.java @@ -0,0 +1,16 @@ +public class InsuranceStrategyMedium extends calculate { + @Override + public int getConstant() { + return 38600; + } + + @Override + public double getWeight() { + return 0.035; + } + + @Override + public int getAdjustment() { + return 25000; + } +} diff --git a/src/InsuranceStrategyVeryHigh.java b/src/InsuranceStrategyVeryHigh.java index 7e527da..ee7ceac 100644 --- a/src/InsuranceStrategyVeryHigh.java +++ b/src/InsuranceStrategyVeryHigh.java @@ -1,4 +1,4 @@ -public class InsuranceStrategyVeryHigh extends InsuranceStrategy { +public class InsuranceStrategyVeryHigh extends calculate { public InsuranceStrategyVeryHigh() { } diff --git a/src/InsuranceStrategy.java b/src/calculate.java similarity index 86% rename from src/InsuranceStrategy.java rename to src/calculate.java index 08bd348..c5fe41e 100644 --- a/src/InsuranceStrategy.java +++ b/src/calculate.java @@ -1,4 +1,4 @@ -public abstract class InsuranceStrategy { +public abstract class calculate { public double calculateInsuranceVeryHigh(double income) { return (income - getAdjustment()) * getWeight() + getConstant();