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);
- }
}