私はいくつかの作業を実行するutilクラスを持っています。明らかに、それは拡張のために閉じられており、すべてのメソッドは静的です。簡略化のために、クラスは次のようになります。静的クラスのテンプレートメソッドパターン
public final class Util {
private Util() { }
public static void doWork() {
// some work
int variable = help();
// some work uses variable
}
private static int help() {
// some helper functionality
}
}
クラスは、計算の多くを実行するメソッドdoWork
を持っています。ちなみに、メソッドはヘルパーメソッドhelp
を呼び出していくつかの結果を取得し、残りのコードはhelp
メソッドによって返された結果を使用します。
クライアントコードでは、メソッドdoWork
の機能を再利用したいが、help
を呼び出す代わりに、help2
メソッドに電話したいと思う。最も簡単な解決策は、help
をhelp2
に置き換えて、メソッドdoWork2
を作成するだけです。
doWork
のすべての変更をdoWork2
に複製する必要があるため、非常に悪い方法です。これはTemplate Method
パターンに非常に似ていますが、ここでは拡張子がないため、適用できません。
ベストソリューション私は、このメソッドにパラメータを追加しますが、doWork
のすべての既存のユーザーを維持するために思い付いた:
public static void doWork() {
doWorkWithParameter(true);
}
public static void doWorkWithParameter(boolean helpOrHelp2) {
// some work
int variable = helpOrHelp2 ? help() : help2();
// some work uses variable
}
よりよい設計ソリューションは、この問題を解決するために適用することができていますか? Template Pattern
のような柔軟性を実現する方法はありますか?しかし、utilクラスのアプリケーションにはあります。
ありがとうございます。
はあなたのソリューションのメソッドのオーバーロードを使用していない何らかの理由はありますか? 'public static void doWork(){...}' 'public static void doWork(boolean param){...}' – Crazenezz
それ以上はまだ 'public static void doWork(int variable)'です。実際の答えは、混乱は静的に起因し、オブジェクトはより洗練された答えを提供すると考えられますが、抽象的な例ではわかりにくいです。 –
あなたが探しているものは戦略パターンです。 Arnaldoの答えを確認してください。 –