彼のプロジェクトで友人を助けようとしていますが、その間に、彼は2つのほぼ同様のアルゴリズムを実装していることがわかりました。
最初に考えたのは、テンプレートパターンを使用することでした。
public abstract class Template {
calculate();
save();
}
等々。ただし、2番目のアルゴリズム
calculate()
ではおよび
save()
追加のパラメーターが必要です。両方のアルゴリズムの両方のメソッド内のコードは、90%で重複しています。
最初のアルゴリズムでは経度だけが必要で、2番目の経度と緯度では必要だとしましょう。
したがって、テンプレートパターンで作成する唯一の方法は、経度と緯度を持つオブジェクトを作成し、両方のアルゴリズムで渡すことです。ただし、最初のアルゴリズムではこの2番目のパラメーターが "null"になるため、このソリューションは好きではありません。
この問題を解決するためのより良い、よりクリーンな方法が見つからないのでしょうか?
回答 2 件
「テンプレートメソッド」と「戦略」パターンを組み合わせてみることができます。どちらのパターンも、実行時にアルゴリズムを交換する能力に関する戦略と、アルゴリズムの構造を柔軟化するテンプレートメソッドという2つの異なる観点からアルゴリズムを懸念しています。
さまざまな数のパラメーターについては、メソッドのオーバーロード/テレスコープを使用するか、パラメーター+ビルダーパターンのラッパークラスを使用できます。
関連記事
- 類似しているが異なるクラスを作成するためのデザインパターン
- 列内の異なる値の数をrでグループ化してカウントします
- 列に存在するさまざまな数の組み合わせをカウントする
- コア内のCPUの総数とは異なるCPUの数を持つスバッチスクリプト?
- 異なるサブプロット内の異なる数のyticklabels
- Javaで数字パターンの正方形を印刷する方法
- 異なる日の通話数をIDでカウントするGroupby
- numpyのリストから異なる数で各次元を分割します
- 配列のi、i + 1、i +2に3つの異なる数値を追加する方法
- VBAを使用してExcelで「代替的に」配置されている「異なるサイズのマージされたセル」にシリアル番号を追加するにはどうすればよいですか?
テンプレートを作成することはできますが、Calculator型のオブジェクトを渡し、パラメーターの数が異なる計算機を使用して、たとえば次のようにすることができます。
次に、次のタイプの計算機を使用できます。
そして、次のようにテンプレートインスタンスを使用できます。
このようにして、計算をテンプレートから分離します。そして、そこから改善することができます-たとえば、毎回新しいインスタンスを作成する代わりに、計算機を共有できます。