0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Strategyパターン

Last updated at Posted at 2025-05-24

1. Strategy パターンとは?

  • 定義: アルゴリズムのファミリーを定義し、それぞれをカプセル化して交換可能にするデザインパターン
  • 目的: 実行時にアルゴリズムを動的に変更可能にする
  • カテゴリ: 振る舞いパターン(Behavioral Pattern)

2. どんな時に使う?

  • 同じタスクを異なる方法で実行する必要がある場合
  • アルゴリズムの変更をクライアントから独立させたい場合
  • 条件分岐を減らし、コードを柔軟にしたい場合

3. 構造

  • Context: 戦略を利用するクラス。Strategyの参照を持つ
  • Strategy: アルゴリズムのインターフェース
  • ConcreteStrategy: 具体的なアルゴリズムの実装

4. サンプルコード(Java)

支払い方法を切り替える例。

// Strategyインターフェース
interface PaymentStrategy {
    void pay(int amount);
}

// ConcreteStrategy
class CreditCardPayment implements PaymentStrategy {
    public void pay(int amount) {
        System.out.println("Paid " + amount + " with Credit Card");
    }
}

class PayPalPayment implements PaymentStrategy {
    public void pay(int amount) {
        System.out.println("Paid " + amount + " with PayPal");
    }
}

// Context
class ShoppingCart {
    private PaymentStrategy paymentStrategy;
    
    public void setPaymentStrategy(PaymentStrategy strategy) {
        this.paymentStrategy = strategy;
    }
    
    public void checkout(int amount) {
        paymentStrategy.pay(amount);
    }
}

// クライアントコード
public class Main {
    public static void main(String[] args) {
        ShoppingCart cart = new ShoppingCart();
        cart.setPaymentStrategy(new CreditCardPayment());
        cart.checkout(100); // Paid 100 with Credit Card
        cart.setPaymentStrategy(new PayPalPayment());
        cart.checkout(200); // Paid 200 with PayPal
    }
}

5. メリット

  • アルゴリズムを交換可能、コードの再利用性向上
  • 条件分岐を削減し、単一責任の原則を遵守
  • 新しいアルゴリズムの追加が容易

6. デメリット

  • クラス数が増える
  • クライアントが具体的な戦略を知る必要がある場合も

7. 実際の使用例

  • ソートアルゴリズム(クイックソート、マージソートなど)の切り替え
  • 支払い処理(クレジットカード、PayPal、暗号通貨など)
  • ゲームのAI戦略(攻撃的、防御的など)

8. まとめ

  • Strategyパターンは、アルゴリズムを動的に切り替えたい場合に有効
  • 柔軟性と拡張性を提供し、条件分岐を最小限に抑える
  • 適切な場面で使用すれば、コードの保守性が向上!
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?