diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hexagon/ConstantTaxRateRepository.java b/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hexagon/ConstantTaxRateRepository.java new file mode 100644 index 0000000000..fb7b2963c0 --- /dev/null +++ b/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hexagon/ConstantTaxRateRepository.java @@ -0,0 +1,11 @@ +package com.baeldung.hexagon; + +public class ConstantTaxRateRepository implements TaxRateRepository{ + + private static final double TAX_RATE = 0.13d; + + @Override + public double getRate() { + return TAX_RATE; + } +} diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hexagon/TaxCalculator.java b/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hexagon/TaxCalculator.java new file mode 100644 index 0000000000..6a2f875f5b --- /dev/null +++ b/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hexagon/TaxCalculator.java @@ -0,0 +1,17 @@ +package com.baeldung.hexagon; + +public class TaxCalculator implements TaxService { + + private TaxRateRepository taxRateRepository; + + public TaxCalculator(TaxRateRepository repository) { + super(); + taxRateRepository = repository; + } + + @Override + public double calculateTax(Double amount) { + return amount * taxRateRepository.getRate(); + } + +} diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hexagon/TaxFactory.java b/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hexagon/TaxFactory.java new file mode 100644 index 0000000000..d35c3fca2e --- /dev/null +++ b/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hexagon/TaxFactory.java @@ -0,0 +1,13 @@ +package com.baeldung.hexagon; + +public class TaxFactory { + + public static TaxService getTaxService() { + return new TaxCalculator(getTaxRepository()); + } + + public static TaxRateRepository getTaxRepository() { + return new ConstantTaxRateRepository(); + } + +} diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hexagon/TaxRateRepository.java b/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hexagon/TaxRateRepository.java new file mode 100644 index 0000000000..ca1623a4ef --- /dev/null +++ b/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hexagon/TaxRateRepository.java @@ -0,0 +1,6 @@ +package com.baeldung.hexagon; + +public interface TaxRateRepository { + + public double getRate(); +} diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hexagon/TaxService.java b/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hexagon/TaxService.java new file mode 100644 index 0000000000..a6652d81ff --- /dev/null +++ b/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hexagon/TaxService.java @@ -0,0 +1,7 @@ +package com.baeldung.hexagon; + +public interface TaxService { + + public double calculateTax(Double amount); + +} diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hexagon/TestTaxUser.java b/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hexagon/TestTaxUser.java new file mode 100644 index 0000000000..82ab5fafa8 --- /dev/null +++ b/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hexagon/TestTaxUser.java @@ -0,0 +1,9 @@ +package com.baeldung.hexagon; + +public class TestTaxUser { + + public double calculateTax(Double amount) { + return TaxFactory.getTaxService().calculateTax(amount); + } + +}