戦略パターン


アルゴリズムのファミリーを定義し、それぞれをカプセル化し、交換可能にします.戦略は、アルゴリズムを使用するクライアントから独立して変化させる.

参加者

  • 戦略:すべてのサポートされているアルゴリズムに共通のインターフェイスを宣言します.コンテキストは、具体的な戦略
  • で定義されたアルゴリズムを呼び出すためにこのインターフェイスを使用します
  • 具体的な戦略:戦略インターフェイス
  • を使用してアルゴリズムを実装します
  • 文脈:具体的な戦略オブジェクトで構成されます.戦略オブジェクトへのリファレンスを保持します.戦略がデータにアクセスできるインターフェイスを定義します.
  • コード


    public class Main {
    
        public static void main(String[] args) {
            Context context;
            context = new Context(new ConcreteStrategyA());
            context.contextInterface();
            context = new Context(new ConcreteStrategyB());
            context.contextInterface();
        }
    }
    
    public interface Strategy {
    
        void algorithmInterface();
    
    }
    
    public class ConcreteStrategyA implements Strategy {
    
        @Override
        public void algorithmInterface() {
            System.out.println("Called ConcreteStrategyA.AlgorithmInterface()");
        }
    
    }
    
    public class ConcreteStrategyB implements Strategy {
    
        @Override
        public void algorithmInterface() {
            System.out.println("Called ConcreteStrategyB.AlgorithmInterface()");
        }
    
    }
    
    public class Context {
        private Strategy strategy;
    
        public Context(Strategy strategy) {
            this.strategy = strategy;
        }
    
        public void contextInterface()  {
            strategy.algorithmInterface();
        }
    }
    
    

    出力


    Called ConcreteStrategyA.AlgorithmInterface()
    Called ConcreteStrategyB.AlgorithmInterface()
    

    エディエルジュリアン61 / デザインパターン