Name: Glen Mark T.
Anduiza
Date: 02/18/2025
Using the Strategy Pattern, implement a set of classes to compute for Sales Tax in the US.
Using the formula [Sales Tax%] x $[amount] = $[tax]
Assumptions:
1. Sales Tax varies per state.
2. We will only support 5 states for now; but will add more in the future.
3. Tax rates are: MN=6.78%, CA=6.5%, NY=4.00%, NM=5.125%, TX=6.25%
Define Strategy Interface for Sales Tax Calculator
[Link]
public interface TaxCalculatorService {
double calculateTax(double amount);
}
Define Context class for Sales Tax Calculator
[Link]
public class SalesTaxCalculator {
private TaxCalculatorService taxCalculatorService;
public void setTaxCalculator(TaxCalculatorService taxCalculator) {
[Link] = taxCalculator;
}
public double computeSalesTax(double amount) {
return [Link](amount);
}
}
Implement Concrete Strategy classes for MN, CA, NY, NM and TX
[Link]
@Service
public class MinnesotaTaxCalculatorServiceImpl implements TaxCalculatorService {
private static final double TAX_RATE = 0.0678;
public double calculateTax(double amount) {
return amount * TAX_RATE;
}
}
[Link]
@Service
public class CaliforniaTaxCalculatorServiceImpl implements TaxCalculatorService {
private static final double TAX_RATE = 0.065;
public double calculateTax(double amount) {
return amount * TAX_RATE;
}
}
[Link]
@Service
public class NewYorkTaxCalculatorServiceImpl implements TaxCalculatorService {
private static final double TAX_RATE = 0.04;
public double calculateTax(double amount) {
return amount * TAX_RATE;
}
}
[Link]
@Service
public class NewMexicoTaxCalculatorServiceImpl implements TaxCalculatorService {
private static final double TAX_RATE = 0.05125;
public double calculateTax(double amount) {
return amount * TAX_RATE;
}
}
[Link]
@Service
public class TexasTaxCalculatorServiceImpl implements TaxCalculatorService {
private static final double TAX_RATE = 0.0625;
public double calculateTax(double amount) {
return amount * TAX_RATE;
}
}
Create Client class
@SpringBootApplication
public class TaxCalculatorApplication {
public static void main(String[] args) {
[Link]([Link], args);
//Sample Purchase Amount
double purchaseAmount = 100.0;
SalesTaxCalculator calculator = new SalesTaxCalculator();
// Change strategy to Minnesota
[Link](new MinnesotaTaxCalculatorServiceImpl());
double taxMinnesota = [Link](purchaseAmount);
[Link]("MN Sales Tax on $" + purchaseAmount + ": $" + taxMinnesota);
// Change strategy to California
[Link](new CaliforniaTaxCalculatorServiceImpl());
double taxCalifornia = [Link](purchaseAmount);
[Link]("CA Sales Tax on $" + purchaseAmount + ": $" +
taxCalifornia);
// Change strategy to New York
[Link](new NewYorkTaxCalculatorServiceImpl());
double taxNewYork = [Link](purchaseAmount);
[Link]("NY Sales Tax on $" + purchaseAmount + ": $" + taxNewYork);
// Change strategy to New Mexico
[Link](new NewMexicoTaxCalculatorServiceImpl());
double taxNewMexico = [Link](purchaseAmount);
[Link]("NM Sales Tax on $" + purchaseAmount + ": $" + taxNewMexico);
// Change strategy to Texas
[Link](new TexasTaxCalculatorServiceImpl());
double taxTexas = [Link](purchaseAmount);
[Link]("TX Sales Tax on $" + purchaseAmount + ": $" + taxTexas);
}
}