bugfix> java > 投稿

彼のプロジェクトで友人を助けようとしていますが、その間に、彼は2つのほぼ同様のアルゴリズムを実装していることがわかりました。

最初に考えたのは、テンプレートパターンを使用することでした。

public abstract class Template {
    calculate();
    save();
}

等々。ただし、2番目のアルゴリズム calculate() ではおよび save() 追加のパラメーターが必要です。両方のアルゴリズムの両方のメソッド内のコードは、90%で重複しています。

最初のアルゴリズムでは経度だけが必要で、2番目の経度と緯度では必要だとしましょう。

したがって、テンプレートパターンで作成する唯一の方法は、経度と緯度を持つオブジェクトを作成し、両方のアルゴリズムで渡すことです。ただし、最初のアルゴリズムではこの2番目のパラメーターが "null"になるため、このソリューションは好きではありません。

この問題を解決するためのより良い、よりクリーンな方法が見つからないのでしょうか?

回答 2 件
  • テンプレートを作成することはできますが、Calculator型のオブジェクトを渡し、パラメーターの数が異なる計算機を使用して、たとえば次のようにすることができます。

    public class Template {
        calculate(ICalculator calculator);       
    }
    interface ICalculator(){
      double calculate();
    }
    
    

    次に、次のタイプの計算機を使用できます。

    class OneParameterCalculator implements ICalculator{
     private final double latitude;
     public OneParameterCalculator(double latitude){ this.latitude=latitude; }
     public double calculate(){
     ....
     }
    }
    class TwoParameterCalculator implements ICalculator{
     private final double latitude;
     private final double longtitude;
    public TwoParameterCalculator (double latitude,double longtitude){ this.latitude=latitude; this.longtitude=longtitude; }
     public double calculate(){
     ....
     }
    }
    
    

    そして、次のようにテンプレートインスタンスを使用できます。

    myTemplate.calculate(new OneParameterCalculator(latitudeValue));
    
    

    このようにして、計算をテンプレートから分離します。そして、そこから改善することができます-たとえば、毎回新しいインスタンスを作成する代わりに、計算機を共有できます。

  • 「テンプレートメソッド」と「戦略」パターンを組み合わせてみることができます。どちらのパターンも、実行時にアルゴリズムを交換する能力に関する戦略と、アルゴリズムの構造を柔軟化するテンプレートメソッドという2つの異なる観点からアルゴリズムを懸念しています。

    さまざまな数のパラメーターについては、メソッドのオーバーロード/テレスコープを使用するか、パラメーター+ビルダーパターンのラッパークラスを使用できます。

あなたの答え