diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 0000000..797acea
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/RefactoringAssignment.iml b/RefactoringAssignment.iml
index 7e880ab..4049286 100644
--- a/RefactoringAssignment.iml
+++ b/RefactoringAssignment.iml
@@ -24,5 +24,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/HighInsuranceStrategy.java b/src/HighInsuranceStrategy.java
new file mode 100644
index 0000000..5cf2e6b
--- /dev/null
+++ b/src/HighInsuranceStrategy.java
@@ -0,0 +1,19 @@
+public class HighInsuranceStrategy extends InsuranceStrategy {
+ public HighInsuranceStrategy() {
+ }
+
+ @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/InsuranceCalculator.java b/src/InsuranceCalculator.java
index 558e0a0..2fb800d 100644
--- a/src/InsuranceCalculator.java
+++ b/src/InsuranceCalculator.java
@@ -1,15 +1,20 @@
public class InsuranceCalculator {
+ private InsuranceStrategy strategy;
+
public double calculateInsurance(double income) {
if (income <= 10000) {
- return income*0.365;
+ strategy = new LowInsuranceStrategy();
+ return strategy.calculate(income);
} else if (income <= 30000) {
- return (income-10000)*0.2+35600;
+ strategy = new MediumInsuranceStrategy();
+ return strategy.calculate(income);
} else if (income <= 60000) {
- return (income-30000)*0.1+76500;
+ strategy = new HighInsuranceStrategy();
+ return strategy.calculate(income);
} else {
- return (income-60000)*0.02+105600;
+ strategy = new VeryHighInsuranceStrategy();
+ return strategy.calculate(income);
}
}
-
}
diff --git a/src/InsuranceStrategy.java b/src/InsuranceStrategy.java
new file mode 100644
index 0000000..1ebf362
--- /dev/null
+++ b/src/InsuranceStrategy.java
@@ -0,0 +1,11 @@
+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/LowInsuranceStrategy.java b/src/LowInsuranceStrategy.java
new file mode 100644
index 0000000..dc0d40d
--- /dev/null
+++ b/src/LowInsuranceStrategy.java
@@ -0,0 +1,19 @@
+public class LowInsuranceStrategy extends InsuranceStrategy {
+ public LowInsuranceStrategy() {
+ }
+
+ @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/MediumInsuranceStrategy.java b/src/MediumInsuranceStrategy.java
new file mode 100644
index 0000000..27c4fd8
--- /dev/null
+++ b/src/MediumInsuranceStrategy.java
@@ -0,0 +1,19 @@
+public class MediumInsuranceStrategy extends InsuranceStrategy {
+ public MediumInsuranceStrategy() {
+ }
+
+ @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/VeryHighInsuranceStrategy.java b/src/VeryHighInsuranceStrategy.java
new file mode 100644
index 0000000..27f613a
--- /dev/null
+++ b/src/VeryHighInsuranceStrategy.java
@@ -0,0 +1,19 @@
+public class VeryHighInsuranceStrategy extends InsuranceStrategy {
+ public VeryHighInsuranceStrategy() {
+ }
+
+ @Override
+ public int getConstant() {
+ return 105600;
+ }
+
+ @Override
+ public double getWeight() {
+ return 0.02;
+ }
+
+ @Override
+ public int getAdjustment() {
+ return 60000;
+ }
+}
\ No newline at end of file
diff --git a/test/TestInsuranceCalculator.java b/test/TestInsuranceCalculator.java
new file mode 100644
index 0000000..01587b8
--- /dev/null
+++ b/test/TestInsuranceCalculator.java
@@ -0,0 +1,33 @@
+import org.junit.Assert;
+import org.junit.Test;
+
+
+public class TestInsuranceCalculator{
+ @Test
+ public void calculateInsurance() {
+ Assert.assertNotNull(insuranceFor(30000));
+ }
+
+ @Test
+ public void testLow() {
+ Assert.assertEquals(1825, insuranceFor(5000), 0.01);
+ }
+
+ @Test
+ public void testMedium() { Assert.assertEquals(38600, insuranceFor(25000), 0.01);
+ }
+
+ @Test
+ public void testHigh() {
+ Assert.assertEquals(78500, insuranceFor(50000), 0.01);
+ }
+
+ @Test
+ public void testVeryHigh() {
+ Assert.assertEquals(106400, insuranceFor(100_000), 0.01);
+ }
+
+ private double insuranceFor(double income) {
+ return new InsuranceCalculator().calculateInsurance(income);
+ }
+}
\ No newline at end of file