Strategy
振る舞いパターン
アルゴリズムをカプセル化し、実行時に切り替え可能にする。if-else/switchの氾濫を防ぐ。
クラス図
シーケンス図
アクティビティ図
使いどころ
- 支払い方法の切り替え(クレカ/PayPay/銀行振込)
- ソートアルゴリズムの選択
- 割引計算ルールの適用
- 認証方式の切り替え(OAuth/SAML/Basic)
- ファイル出力形式の選択(CSV/JSON/XML)
コード例
インターフェース
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%オフ