[英]When use a static class instead of the singleton pattern?
方法,你不需要任何特定的實現基類或接口的-當你有“剛代碼”方法使用一個靜態的“工具”類(只是靜態方法的類)。 關鍵指標是代碼是無狀態的 - 即類中沒有(靜態)字段給它狀態。 無狀態也意味着這些方法是自動線程安全的 - 另一個好處。
JDK中有許多示例( Collections
是一個值得注意的例子),並且這種模式的apache commons庫運行良好。
此外,為了避免“類膨脹”,而不是為特定的簡單實現提供類,您可以使用返回特定實現的靜態(抽象)工廠方法,例如:
public static Comparator<String> createCaselessStringCompatator() {
return new Comparator<String> () {
public int compare(String o1, String o2) {
return o1.toUpperCase().compareTo(o2.toUpperCase());
}
};
}
public static Comparator<String> createNumericStringCompatator() {
return new Comparator<String> () {
public int compare(String o1, String o2) {
return new Double(o1).compareTo(new Double(o2));
}
};
}
這種模式避免了創建一個全新的類文件,只需要一行實際有用的代碼(即“ 閉包 ”) 並將它們捆綁在一起,所以如果你知道你的實用程序類名,你的IDE會提示你哪個impl你想選擇:
Collections.sort(myStringList, MyComparators.|<-- ctrl+space to offer options
而沒有這種模式,你必須記住每個實現的類名。
我認為這將是一個需要一些實用功能的地方,這又是靜態的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.