diff --git a/design_pattern/src/main/java/example/strategy/BitcoinPayment.java b/design_pattern/src/main/java/example/strategy/BitcoinPayment.java deleted file mode 100644 index ce1b4b2..0000000 --- a/design_pattern/src/main/java/example/strategy/BitcoinPayment.java +++ /dev/null @@ -1,14 +0,0 @@ -package example.strategy; - -public class BitcoinPayment implements PaymentStrategy { - private String walletAddress; - - public BitcoinPayment(String walletAddress) { - this.walletAddress = walletAddress; - } - - @Override - public void pay(int amount) { - System.out.println(amount + "원을 비트코인 지갑(" + walletAddress + ")으로 결제했습니다."); - } -} diff --git a/design_pattern/src/main/java/example/strategy/Clothing.java b/design_pattern/src/main/java/example/strategy/Clothing.java new file mode 100644 index 0000000..5324469 --- /dev/null +++ b/design_pattern/src/main/java/example/strategy/Clothing.java @@ -0,0 +1,30 @@ +package example.strategy; + +public class Clothing { + private String name; + private String type; // top, bottom, outer 등 + private int price; + + public Clothing(String name, String type, int price) { + this.name = name; + this.type = type; + this.price = price; + } + + public String getName() { + return name; + } + + public String getType() { + return type; + } + + public int getPrice() { + return price; + } + + @Override + public String toString() { + return name + " [" + type + "] - " + price + "원"; + } +} diff --git a/design_pattern/src/main/java/example/strategy/ClothingFilterContext.java b/design_pattern/src/main/java/example/strategy/ClothingFilterContext.java new file mode 100644 index 0000000..d2934a8 --- /dev/null +++ b/design_pattern/src/main/java/example/strategy/ClothingFilterContext.java @@ -0,0 +1,19 @@ +package example.strategy; + +import java.util.List; + +public class ClothingFilterContext { + private ClothingFilterStrategy strategy; + + public void setStrategy(ClothingFilterStrategy strategy) { + this.strategy = strategy; + } + + public List filterClothing(List clothes) { + if (strategy == null) { + throw new IllegalStateException("전략이 설정되지 않았습니다."); + } + return strategy.filter(clothes); + } +} + diff --git a/design_pattern/src/main/java/example/strategy/ClothingFilterStrategy.java b/design_pattern/src/main/java/example/strategy/ClothingFilterStrategy.java new file mode 100644 index 0000000..a875222 --- /dev/null +++ b/design_pattern/src/main/java/example/strategy/ClothingFilterStrategy.java @@ -0,0 +1,9 @@ +package example.strategy; + +import java.util.List; + +public interface ClothingFilterStrategy { + List filter(List clothes); +} + + diff --git a/design_pattern/src/main/java/example/strategy/CreditCardPayment.java b/design_pattern/src/main/java/example/strategy/CreditCardPayment.java deleted file mode 100644 index 27fe466..0000000 --- a/design_pattern/src/main/java/example/strategy/CreditCardPayment.java +++ /dev/null @@ -1,14 +0,0 @@ -package example.strategy; - -public class CreditCardPayment implements PaymentStrategy { - private String cardNumber; - - public CreditCardPayment(String cardNumber) { - this.cardNumber = cardNumber; - } - - @Override - public void pay(int amount) { - System.out.println(amount + "원을 신용카드(" + cardNumber + ")로 결제했습니다."); - } -} diff --git a/design_pattern/src/main/java/example/strategy/PayPalPayment.java b/design_pattern/src/main/java/example/strategy/PayPalPayment.java deleted file mode 100644 index d26e961..0000000 --- a/design_pattern/src/main/java/example/strategy/PayPalPayment.java +++ /dev/null @@ -1,14 +0,0 @@ -package example.strategy; - -public class PayPalPayment implements PaymentStrategy { - private String email; - - public PayPalPayment(String email) { - this.email = email; - } - - @Override - public void pay(int amount) { - System.out.println(amount + "원을 PayPal(" + email + ")로 결제했습니다."); - } -} diff --git a/design_pattern/src/main/java/example/strategy/PaymentContext.java b/design_pattern/src/main/java/example/strategy/PaymentContext.java deleted file mode 100644 index be17def..0000000 --- a/design_pattern/src/main/java/example/strategy/PaymentContext.java +++ /dev/null @@ -1,17 +0,0 @@ -package example.strategy; - -public class PaymentContext { - private PaymentStrategy paymentStrategy; - - public void setPaymentStrategy(PaymentStrategy paymentStrategy) { - this.paymentStrategy = paymentStrategy; - } - - public void executePayment(int amount) { - if (paymentStrategy == null) { - System.out.println("결제 방법이 선택되지 않았습니다."); - return; - } - paymentStrategy.pay(amount); - } -} diff --git a/design_pattern/src/main/java/example/strategy/PaymentStrategy.java b/design_pattern/src/main/java/example/strategy/PaymentStrategy.java deleted file mode 100644 index 2facad5..0000000 --- a/design_pattern/src/main/java/example/strategy/PaymentStrategy.java +++ /dev/null @@ -1,5 +0,0 @@ -package example.strategy; - -public interface PaymentStrategy { - void pay(int amount); -} diff --git a/design_pattern/src/main/java/example/strategy/PriceBelowFilter.java b/design_pattern/src/main/java/example/strategy/PriceBelowFilter.java new file mode 100644 index 0000000..3fe7638 --- /dev/null +++ b/design_pattern/src/main/java/example/strategy/PriceBelowFilter.java @@ -0,0 +1,20 @@ +package example.strategy; + +import java.util.List; +import java.util.stream.Collectors; + +public class PriceBelowFilter implements ClothingFilterStrategy { + private int maxPrice; + + public PriceBelowFilter(int maxPrice) { + this.maxPrice = maxPrice; + } + + @Override + public List filter(List clothes) { + return clothes.stream() + .filter(c -> c.getPrice() <= maxPrice) + .collect(Collectors.toList()); + } +} + diff --git a/design_pattern/src/main/java/example/strategy/TopFilter.java b/design_pattern/src/main/java/example/strategy/TopFilter.java new file mode 100644 index 0000000..bdb9aa1 --- /dev/null +++ b/design_pattern/src/main/java/example/strategy/TopFilter.java @@ -0,0 +1,13 @@ +package example.strategy; + +import java.util.List; +import java.util.stream.Collectors; + +public class TopFilter implements ClothingFilterStrategy { + @Override + public List filter(List clothes) { + return clothes.stream() + .filter(c -> "top".equalsIgnoreCase(c.getType())) + .collect(Collectors.toList()); + } +} diff --git a/design_pattern/src/test/java/example/strategy/ClothingStrategyTest.java b/design_pattern/src/test/java/example/strategy/ClothingStrategyTest.java new file mode 100644 index 0000000..aa0a117 --- /dev/null +++ b/design_pattern/src/test/java/example/strategy/ClothingStrategyTest.java @@ -0,0 +1,33 @@ +package example.strategy; + +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.List; + +class ClothingStrategyTest { + + @Test + void clothingStrategyTest() { + List clothes = Arrays.asList( + new Clothing("반팔 티셔츠", "top", 25000), + new Clothing("청바지", "bottom", 55000), + new Clothing("가디건", "outer", 75000), + new Clothing("셔츠", "top", 49000), + new Clothing("코트", "outer", 150000) + ); + + ClothingFilterContext context = new ClothingFilterContext(); + + // 상의만 필터링 + context.setStrategy(new TopFilter()); + System.out.println("=== 상의만 필터링 ==="); + context.filterClothing(clothes).forEach(System.out::println); + + // 5만원 이하 필터링 + context.setStrategy(new PriceBelowFilter(50000)); + System.out.println("\n=== 5만 원 이하만 필터링 ==="); + context.filterClothing(clothes).forEach(System.out::println); + } +} + diff --git a/design_pattern/src/test/java/example/strategy/strategyPatternTest.java b/design_pattern/src/test/java/example/strategy/strategyPatternTest.java deleted file mode 100644 index a032984..0000000 --- a/design_pattern/src/test/java/example/strategy/strategyPatternTest.java +++ /dev/null @@ -1,24 +0,0 @@ -package example.strategy; - -import org.junit.jupiter.api.Test; - -class strategyPatternTest { - - @Test - void strategyPatterTest() { - PaymentContext paymentContext = new PaymentContext(); - - // 신용카드 결제 - paymentContext.setPaymentStrategy(new CreditCardPayment("1234-5678-9012-3456")); - paymentContext.executePayment(50000); - - // 페이팔 결제 - paymentContext.setPaymentStrategy(new PayPalPayment("user@example.com")); - paymentContext.executePayment(30000); - - // 비트코인 결제 - paymentContext.setPaymentStrategy(new BitcoinPayment("1A2b3C4d5E6F")); - paymentContext.executePayment(70000); - } -} -