From 7382607752587a219c05e3437a651e8b80498d2c Mon Sep 17 00:00:00 2001 From: Stanislav Date: Thu, 9 Apr 2026 18:18:45 +0300 Subject: [PATCH] strategy pattern --- .../core/basesyntax/DiscountStrategy.java | 22 +++++++++++++++++++ src/main/java/core/basesyntax/HelloWorld.java | 8 ------- .../basesyntax/strategy/DiscountService.java | 5 +++++ .../impl/BirthdayDiscountService.java | 12 ++++++++++ .../impl/BlackFridayDiscountService.java | 12 ++++++++++ .../strategy/impl/DefaultDiscountService.java | 12 ++++++++++ .../strategy/impl/NewYearDiscountService.java | 12 ++++++++++ 7 files changed, 75 insertions(+), 8 deletions(-) create mode 100644 src/main/java/core/basesyntax/DiscountStrategy.java delete mode 100644 src/main/java/core/basesyntax/HelloWorld.java create mode 100644 src/main/java/core/basesyntax/strategy/DiscountService.java create mode 100644 src/main/java/core/basesyntax/strategy/impl/BirthdayDiscountService.java create mode 100644 src/main/java/core/basesyntax/strategy/impl/BlackFridayDiscountService.java create mode 100644 src/main/java/core/basesyntax/strategy/impl/DefaultDiscountService.java create mode 100644 src/main/java/core/basesyntax/strategy/impl/NewYearDiscountService.java diff --git a/src/main/java/core/basesyntax/DiscountStrategy.java b/src/main/java/core/basesyntax/DiscountStrategy.java new file mode 100644 index 00000000..6b3029e6 --- /dev/null +++ b/src/main/java/core/basesyntax/DiscountStrategy.java @@ -0,0 +1,22 @@ +package core.basesyntax; + +import core.basesyntax.strategy.DiscountService; +import core.basesyntax.strategy.impl.BirthdayDiscountService; +import core.basesyntax.strategy.impl.BlackFridayDiscountService; +import core.basesyntax.strategy.impl.DefaultDiscountService; +import core.basesyntax.strategy.impl.NewYearDiscountService; + +public class DiscountStrategy { + DiscountService getDiscountServiceBySpecialEvent(String specialEvent) { + switch (specialEvent) { + case "Birthday": + return new BirthdayDiscountService(); + case "Black Friday": + return new BlackFridayDiscountService(); + case "New Year": + return new NewYearDiscountService(); + default: + return new DefaultDiscountService(); + } + } +} diff --git a/src/main/java/core/basesyntax/HelloWorld.java b/src/main/java/core/basesyntax/HelloWorld.java deleted file mode 100644 index 97db782b..00000000 --- a/src/main/java/core/basesyntax/HelloWorld.java +++ /dev/null @@ -1,8 +0,0 @@ -package core.basesyntax; - -/** - * Feel free to remove this class and create your own. - */ -public class HelloWorld { - -} diff --git a/src/main/java/core/basesyntax/strategy/DiscountService.java b/src/main/java/core/basesyntax/strategy/DiscountService.java new file mode 100644 index 00000000..492e1b37 --- /dev/null +++ b/src/main/java/core/basesyntax/strategy/DiscountService.java @@ -0,0 +1,5 @@ +package core.basesyntax.strategy; + +public interface DiscountService { + double getDiscount(); +} diff --git a/src/main/java/core/basesyntax/strategy/impl/BirthdayDiscountService.java b/src/main/java/core/basesyntax/strategy/impl/BirthdayDiscountService.java new file mode 100644 index 00000000..2db0d348 --- /dev/null +++ b/src/main/java/core/basesyntax/strategy/impl/BirthdayDiscountService.java @@ -0,0 +1,12 @@ +package core.basesyntax.strategy.impl; + +import core.basesyntax.strategy.DiscountService; + +public class BirthdayDiscountService implements DiscountService { + private static final int BIRTHDAY_DISCOUNT = 33; + + @Override + public double getDiscount() { + return BIRTHDAY_DISCOUNT; + } +} diff --git a/src/main/java/core/basesyntax/strategy/impl/BlackFridayDiscountService.java b/src/main/java/core/basesyntax/strategy/impl/BlackFridayDiscountService.java new file mode 100644 index 00000000..0a67cb64 --- /dev/null +++ b/src/main/java/core/basesyntax/strategy/impl/BlackFridayDiscountService.java @@ -0,0 +1,12 @@ +package core.basesyntax.strategy.impl; + +import core.basesyntax.strategy.DiscountService; + +public class BlackFridayDiscountService implements DiscountService { + private static final int BLACK_FRIDAY_DISCOUNT = 45; + + @Override + public double getDiscount() { + return BLACK_FRIDAY_DISCOUNT; + } +} diff --git a/src/main/java/core/basesyntax/strategy/impl/DefaultDiscountService.java b/src/main/java/core/basesyntax/strategy/impl/DefaultDiscountService.java new file mode 100644 index 00000000..4d2f183c --- /dev/null +++ b/src/main/java/core/basesyntax/strategy/impl/DefaultDiscountService.java @@ -0,0 +1,12 @@ +package core.basesyntax.strategy.impl; + +import core.basesyntax.strategy.DiscountService; + +public class DefaultDiscountService implements DiscountService { + private static final int DEFAULT_DISCOUNT = 0; + + @Override + public double getDiscount() { + return DEFAULT_DISCOUNT; + } +} diff --git a/src/main/java/core/basesyntax/strategy/impl/NewYearDiscountService.java b/src/main/java/core/basesyntax/strategy/impl/NewYearDiscountService.java new file mode 100644 index 00000000..4aea6ba6 --- /dev/null +++ b/src/main/java/core/basesyntax/strategy/impl/NewYearDiscountService.java @@ -0,0 +1,12 @@ +package core.basesyntax.strategy.impl; + +import core.basesyntax.strategy.DiscountService; + +public class NewYearDiscountService implements DiscountService { + private static final int NEW_YEAR_DISCOUNT = 20; + + @Override + public double getDiscount() { + return NEW_YEAR_DISCOUNT; + } +}