我有一個執行一些工作的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
方法。最簡單的解決方案就是創建方法doWork2
,將help
替換爲help2
。
這是非常糟糕的做法,因爲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類中。
在此先感謝。
有沒有你不解決方案使用方法重載的原因嗎? '公共靜態無效的doWork(){...}'' 公共靜態無效的doWork(布爾PARAM){...}' – Crazenezz 2013-04-26 12:54:11
或者更好的'公共靜態無效的doWork(int變量)'。雖然我懷疑實際的答案是,混亂是由於靜態和對象將提供更清潔的答案 - 很難說具有雖然抽象的例子。 – 2013-04-26 12:59:56
你所尋找的是策略模式。檢查阿納爾多的答案。 – 2013-04-26 13:05:43