Ich habe eine Util-Klasse, die einige Arbeit ausführen. Offensichtlich ist es für die Erweiterung geschlossen und alle Methoden sind statisch. Aus Gründen der Einfachheit, sieht die Klasse wie folgt:Template Methode Muster für statische Klassen
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
}
}
Die Klassenmethode hat doWork
, die eine Menge von Berechnungen durchführt. By the way, Methode ruft Helfer Methode help
, um einige Ergebnisse und den Rest des Codes zu erhalten verwenden Sie das Ergebnis von help
Methode zurückgegeben.
Nun, im Client-Code möchte ich die Funktionalität der Methode doWork
wiederverwenden, aber anstatt help
aufrufen möchte ich help2
Methode aufrufen. Die einfachste Lösung ist das Erstellen der Methode doWork2
mit Ersetzen von help
bis help2
.
Es ist sehr schlechte Ansatz, denn jede Änderung in doWork
muss in doWork2
entweder repliziert werden. Dies ist sehr ähnlich zu Template Method
Muster, aber aufgrund der Tatsache, dass wir hier keine Erweiterung haben, können wir es nicht anwenden.
beste Lösung, die ich mit dem Parameter hinzufügen, um dieses Verfahren kam, aber erhalte alle bestehenden Nutzer von doWork
:
public static void doWork() {
doWorkWithParameter(true);
}
public static void doWorkWithParameter(boolean helpOrHelp2) {
// some work
int variable = helpOrHelp2 ? help() : help2();
// some work uses variable
}
Was besseren Design-Lösungen angewandt werden können, um dieses Problem zu lösen? Gibt es eine Möglichkeit, Flexibilität wie Template Pattern
zu erreichen, aber in Anwendung auf Util-Klassen.
Vielen Dank im Voraus.
Gibt es einen Grund, warum Sie -Methodenüberladung nicht in Ihrer Lösung verwenden? 'public static void doWork() {...}' 'öffentliche statische void doWork (boolean param) {...}' – Crazenezz
Oder besser noch 'public static void doWork (int variable)'. Obwohl ich die tatsächliche Antwort vermute, ist die Verwirrung auf die Statik zurückzuführen und Objekte würden eine sauberere Antwort liefern - schwer zu sagen mit den abstrakten Beispielen. –
Was Sie suchen, ist Strategie-Muster. Prüfe Arnaldos Antwort. –