← 一覧に戻る

Strategy

振る舞いパターン

アルゴリズムをカプセル化し、実行時に切り替え可能にする。if-else/switchの氾濫を防ぐ。

目次
  1. クラス図
  2. シーケンス図
  3. アクティビティ図
  4. 使いどころ
  5. コード例
  6. AIプロンプト例
  7. 関連パターン

クラス図

シーケンス図

アクティビティ図

使いどころ

コード例

インターフェース

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();

AIプロンプト例

カスタマイズ用プロンプト

以下のStrategyパターンをカスタマイズしてください。

【要件】
・用途: [例: 割引計算]
・戦略の種類: [例: 通常/会員/セール/クーポン]

【インターフェース名】
DiscountStrategy

【具体的な戦略】
1. NoDiscount - 割引なし
2. MemberDiscount - 会員10%オフ
3. SaleDiscount - セール20%オフ
← 一覧に戻る