2011-11-25 11 views
9

ストラテジパターンを使用すると、アルゴリズム実装の中には同じパラメータリストを必要としないものがあります。ストラテジパターンの可変パラメータ

public interface Strategy{ 
    public void algorithm(int num); 
    } 

    public class StrategyImpl1 implements Strategy{ 
    public void algorithm(int num){ 
     //num is needed in this implementation to run algorithm 
    } 
    } 

    public class StrategyImpl2 implements Strategy{ 
    public void algorithm(int num){ 
     //num is not needed in this implementation to run algorithm but because im using same 
     strategy interface I need to pass in parameter 
    } 

} 

例えば

は、私が使用する必要があります異なるデザインパターンがありますか?

答えて

9

これは一般に受け入れられますが、一部の実装でのみ必要なパラメータがある場合は、実装のコンストラクタにそれらを提供する方が合理的です(戦略インタフェースから外す)あなたの状況のオプションになります。

また、Parametersクラスを作成し、戦略メソッドにこれらのいずれかを取ることもできます。このクラスは、さまざまなパラメータ(つまりint num)のゲッターを持つことができます。特定の実装でnumを使用する必要がない場合は、単にparameters.getNum()を呼び出しません。これにより、既存の戦略のインプリメンテーションやインタフェースを変更することなく、新しいパラメータを柔軟に追加できます。

これは、Parametersのようなクラスでは、別の場所で抽象化エラーが発生しているような気がしています。

関連する問題