2015-09-05 97 views
0

我有7-8個可調用的類,它們使用了一些相似的功能,並且還讀了一些相同的列表和HashMap。 因此,我創建了一個靜態類,其中包含靜態函數和靜態列表以及哈希映射的所有功能。面向對象設計vs靜態類在java和併發性開發

現在,我有一些疑問:

1)它是一種錯誤的做法,以在Java靜態類作爲我的前輩罵我在使用靜態類,而讓我把它轉換成一個單例類。

但靜態類比單例更快。不是嗎?

2)它是一個不好的設計有一個參考的靜態/非靜態方法來獲得像調用方法內部列表一些數據(線程)或執行某些任務嗎?

這是否違反線程安全性或並行性,正如我的老人所說的?並要求我將線程類中的列表作爲私有成員。

但不是不好用的內存爲其他線程6-7班利用了相同的列表爲只讀。

3)如何提高OO設計與性能改善以及。

一個示例代碼應該是這樣的:

public class StaticClass { 
    private static List<String> ListOne; 
    private static List<String> listTwo; 
    private static HashMap<String, String> hMap; 

    static{ 
     //initialize list and maps by reading from file 
    } 


    public static List<String> getListOne() { 
     return ListOne; 
    } 
    public static List<String> getListTwo() { 
     return listTwo; 
    } 
    public static HashMap<String, String> gethMap() { 
     return hMap; 
    } 

    public static void commonMethodOne(){ 

    } 

    public static String commonMethodTwo(){ 

     } 

    public static String[] commonMethodThree(){ 

    } 

} 

public class CallableThread implements Callable<String>{ 

    public String call(){ 

     HashMap<String, String> mapTask = StaticClass.gethMap(); 
     List<String> taskOne =StaticClass.getListOne(); 

     for(String temp : taskOne){ 
      //do what you are suppose to do 
     } 
     for(String key : mapTask.keySet()){ 
      //do what you are supposed to do 
     } 
     return "Done with CallableThread"; 
    } 
} 
+2

沒有「資深」的人會推薦一個Singleton。我認爲沒有什麼好處,使這個靜態或單身。如果你有可變的共享數據,你最好注意正確的同步它。在我看來,你擔心錯誤的事情。 – duffymo

回答

2

像這樣的方法是一個可怕的想法(命名較差,未能遵循Java編碼標準除外):

​​

你返回一個可變的引用,因此任何人誰得到這個列表可以爲他們修改其內容 覺得合適。私人不再是私人的。

如果必須退回到私人列表或數據結構(沒有理由這樣做,這樣我可以看到)的參考,您應該讓它不變或返回副本。

public static List<String> getListOne() { 
    return Collections.unmodifiableList(ListOne); 
} 

你有沒有任何同步的可變共享數據,所以這個類是不是線程安全的。

1

我覺得單身遠比靜態類更好

以下是回答你的問題順序:

1)不,這完全取決於你的要求,而且是靜態類更快,但也可以讓更多的bug到你的項目

2)是有時只要它不影響您的私人數據成員,讓你的數據不安全

3)使用單件,因爲它提供了更多的OO FUNTIONALITIES,因此在抗皺性能

這裏是一個很好的參考文章爲您提供:

http://javarevisited.blogspot.in/2013/03/difference-between-singleton-pattern-vs-static-class-java.html