振る舞いパターン
アルゴリズムをカプセル化し、実行時に切り替え可能にする。if-else/switchの氾濫を防ぐ。
public interface PaymentStrategy {
void pay(int amount);
String getName();
}
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 + "円をクレジットカードで決済");
}
@Override
public String getName() { return "クレジットカード"; }
}
public class PayPayPayment implements PaymentStrategy {
@Override
public void pay(int amount) {
System.out.println(amount + "円をPayPayで決済");
}
@Override
public String getName() { return "PayPay"; }
}
public class ShoppingCart {
private List<Item> items = new ArrayList<>();
private PaymentStrategy paymentStrategy;
public void setPaymentStrategy(PaymentStrategy strategy) {
this.paymentStrategy = strategy;
}
public void checkout() {
int total = calculateTotal();
paymentStrategy.pay(total);
}
}
ShoppingCart cart = new ShoppingCart();
cart.addItem(new Item("商品A", 1000));
// 戦略を切り替え
cart.setPaymentStrategy(new CreditCardPayment("1234-5678"));
cart.checkout();
cart.setPaymentStrategy(new PayPayPayment());
cart.checkout();
以下のStrategyパターンをカスタマイズしてください。 【要件】 ・用途: [例: 割引計算] ・戦略の種類: [例: 通常/会員/セール/クーポン] 【インターフェース名】 DiscountStrategy 【具体的な戦略】 1. NoDiscount - 割引なし 2. MemberDiscount - 会員10%オフ 3. SaleDiscount - セール20%オフ