From 915122a699dce15e5c101f903f9955bdfc69f088 Mon Sep 17 00:00:00 2001 From: Cozybbb Date: Wed, 17 Jan 2024 23:38:55 -0500 Subject: [PATCH 1/5] Creating and running test --- .idea/misc.xml | 2 +- test/IfElseDemoTest.java | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 test/IfElseDemoTest.java diff --git a/.idea/misc.xml b/.idea/misc.xml index 0792e77..7d862fb 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/test/IfElseDemoTest.java b/test/IfElseDemoTest.java new file mode 100644 index 0000000..7edb0c5 --- /dev/null +++ b/test/IfElseDemoTest.java @@ -0,0 +1,29 @@ +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class InsuranceCalculatorTest { + @Test + public void lowIncomeInsuranceIsCorrect() { + assertEquals(1825, insuranceFor(5000), 0.01); + } + + @Test + public void mediumIncomeInsuranceIsCorrect() { + assertEquals(38600, insuranceFor(25000), 0.01); + } + + @Test + public void highIncomeInsuranceIsCorrect() { + assertEquals(78500, insuranceFor(50000), 0.01); + } + + @Test + public void veryHighIncomeInsuranceIsCorrect() { + assertEquals(106400, insuranceFor(100_000), 0.01); + } + + private double insuranceFor(double income) { + return new InsuranceCalculator().calculateInsurance(income); + } +} From ceb9592f68acf74be26a2188f9317ad332c8bd9a Mon Sep 17 00:00:00 2001 From: Cozybbb Date: Wed, 17 Jan 2024 23:40:45 -0500 Subject: [PATCH 2/5] Extract methods --- src/InsuranceCalculator.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index 558e0a0..4641c94 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -8,8 +8,23 @@ public double calculateInsurance(double income) { } else if (income <= 60000) { return (income-30000)*0.1+76500; } else { - return (income-60000)*0.02+105600; + return calculateInsuranceHigh(income); } } + private double calculateInsuranceHigh(double income) { + return (income - getAdjustment()) * getWeight() + getConstant(); + } + + private int getConstant() { + return 105600; + } + + private double getWeight() { + return 0.02; + } + + private int getAdjustment() { + return 60000; + } } From 4ddc60504bedc46cc87cb857e2c8083af574cb97 Mon Sep 17 00:00:00 2001 From: Cozybbb Date: Wed, 17 Jan 2024 23:43:01 -0500 Subject: [PATCH 3/5] 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 4641c94..5571ffa 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,30 +1,16 @@ public class InsuranceCalculator { + private final InsuranceStrategyVeryHigh insuranceStrategyVeryHigh = 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 calculateInsuranceHigh(income); + return insuranceStrategyVeryHigh.calculateInsuranceVeryHigh(income); } } - private double calculateInsuranceHigh(double income) { - return (income - getAdjustment()) * getWeight() + getConstant(); - } - - private int getConstant() { - return 105600; - } - - private double getWeight() { - return 0.02; - } - - private int getAdjustment() { - return 60000; - } - } diff --git a/src/InsuranceStrategyVeryHigh.java b/src/InsuranceStrategyVeryHigh.java new file mode 100644 index 0000000..ddba51c --- /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(); + } + + private int getConstant() { + return 105600; + } + + private double getWeight() { + return 0.02; + } + + private int getAdjustment() { + return 60000; + } +} \ No newline at end of file From cc985a97a140c5af989d52e66d9a536344220294 Mon Sep 17 00:00:00 2001 From: Cozybbb Date: Wed, 17 Jan 2024 23:53:18 -0500 Subject: [PATCH 4/5] Fine tuning --- src/InsuranceCalculator.java | 11 ++++++----- src/InsuranceStrategy.java | 11 +++++++++++ src/InsuranceStrategyVeryHigh.java | 15 +++++++-------- 3 files changed, 24 insertions(+), 13 deletions(-) create mode 100644 src/InsuranceStrategy.java diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index 5571ffa..e9be028 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,16 +1,17 @@ public class InsuranceCalculator { - private final InsuranceStrategyVeryHigh insuranceStrategyVeryHigh = new InsuranceStrategyVeryHigh(); + private InsuranceStrategyVeryHigh strategy; 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 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..0ce6cba --- /dev/null +++ b/src/InsuranceStrategy.java @@ -0,0 +1,11 @@ +public abstract class InsuranceStrategy { + public double calculateInsuranceVeryHigh(double income) { + return (income - getAdjustment()) * getWeight() + getConstant(); + } + + protected abstract int getConstant(); + + protected abstract double getWeight(); + + protected abstract int getAdjustment(); +} diff --git a/src/InsuranceStrategyVeryHigh.java b/src/InsuranceStrategyVeryHigh.java index ddba51c..4db2082 100644 --- a/src/InsuranceStrategyVeryHigh.java +++ b/src/InsuranceStrategyVeryHigh.java @@ -1,20 +1,19 @@ -public class InsuranceStrategyVeryHigh { +public class InsuranceStrategyVeryHigh extends InsuranceStrategy { public InsuranceStrategyVeryHigh() { } - public double calculateInsuranceVeryHigh(double income) { - return (income - getAdjustment()) * getWeight() + getConstant(); - } - - private int getConstant() { + @Override + protected int getConstant() { return 105600; } - private double getWeight() { + @Override + protected double getWeight() { return 0.02; } - private int getAdjustment() { + @Override + protected int getAdjustment() { return 60000; } } \ No newline at end of file From f6b888d0e961ce100e68bcf7bea90960c0e8d473 Mon Sep 17 00:00:00 2001 From: Cozybbb Date: Wed, 17 Jan 2024 23:57:00 -0500 Subject: [PATCH 5/5] Implementing abstract class --- src/InsuranceCalculator.java | 13 ++++++++----- src/InsuranceStrategy.java | 2 +- src/InsuranceStrategyHigh.java | 16 ++++++++++++++++ src/InsuranceStrategyLow.java | 16 ++++++++++++++++ src/InsuranceStrategyMedium.java | 16 ++++++++++++++++ 5 files changed, 57 insertions(+), 6 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 e9be028..1d3b3bf 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,17 +1,20 @@ public class InsuranceCalculator { - private InsuranceStrategyVeryHigh strategy; + private InsuranceStrategy strategy; public double calculateInsurance(double income) { if (income <= 10000) { - return income*0.365; + strategy = new InsuranceStrategyLow(); + return strategy.calculate(income); } else if (income <= 30000) { - return (income-10000)*0.2+35600; + strategy = new InsuranceStrategyMedium(); + return strategy.calculate(income); } else if (income <= 60000) { - return (income-30000)*0.1+76500; + 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 0ce6cba..53de621 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..a04b5e9 --- /dev/null +++ b/src/InsuranceStrategyHigh.java @@ -0,0 +1,16 @@ +public class InsuranceStrategyHigh extends InsuranceStrategy { + @Override + protected int getConstant() { + return 76_500; + } + + @Override + protected double getWeight() { + return 0.1; + } + + @Override + protected int getAdjustment() { + return 30_000; + } +} diff --git a/src/InsuranceStrategyLow.java b/src/InsuranceStrategyLow.java new file mode 100644 index 0000000..838fe75 --- /dev/null +++ b/src/InsuranceStrategyLow.java @@ -0,0 +1,16 @@ +public class InsuranceStrategyLow extends InsuranceStrategy { + @Override + protected int getConstant() { + return 0; + } + + @Override + protected double getWeight() { + return 0.365; + } + + @Override + protected int getAdjustment() { + return 0; + } +} diff --git a/src/InsuranceStrategyMedium.java b/src/InsuranceStrategyMedium.java new file mode 100644 index 0000000..2d2c941 --- /dev/null +++ b/src/InsuranceStrategyMedium.java @@ -0,0 +1,16 @@ +public class InsuranceStrategyMedium extends InsuranceStrategy { + @Override + protected int getConstant() { + return 35_600; + } + + @Override + protected double getWeight() { + return 0.2; + } + + @Override + protected int getAdjustment() { + return 10_000; + } +}