簡體   English   中英

使用靜態類而不是單例模式?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM