2015-07-10 175 views
0

我有一個類,其單個實例需要由Java中的多個類使用。我發現了兩個解決方案相同: 1。通過實例方法參數 2.使用靜態工廠在Java(OOP)中共享多個請求的相同實例

我的問題是,如果我使用靜態的工廠,我怎麼能區分傳入的請求時,我使用的是靜態方法。我想避免第一個解決方案,因爲有很多類將使用此實例。另外,如果不是上面提到的,推薦最好的設計。

代碼示例:

class MyClass{ 


     Map<String, List<String>> myMap=new ConcurrentHashMap(); 

      public static void addToMap(String key, String value){ 
       if(myMap.containsKey(key)){ 
        List<String> stringList=myMap.get(key); 
       stringList.add(value); 
       } 
       else{ 
       myMap.put(key,value); 
       } 
      } 
    } 

我想在很多地方執行此add方法,而程序執行例如:

方法addEmployee():

if(employeeName==null){ 
    MyClass.addToMap("ER101", "Name Error"); 
} 
Method insertInDB(): 
catch(SQLException e){ 
    MyClass.addToMap("SQL", "Error Occurred in DB Operation"); 
} 

感謝

+3

只是做一個單身? – 12dollar

+0

@hetalashar您的問題需要更多解釋。你能發表一些示例代碼來解釋你的想法嗎?當你說*使用靜態工廠時*和*當我使用靜態方法*時如何區分傳入請求? – CKing

+0

不能使用單身......有多重要求。 – codegeek

回答

2

有很多方法可以讓同一個類的實例可用於不同的調用者,例如線程或請求。

你可以做的最簡單的事情之一是創建一個單例如上所示。單身人士的問題是,只有他們中的一個人,因爲他們通常被設置爲強制他們有一個單一的實例。

更好的是創建你的實例,並將它傳遞給需要它的東西。如果你正在創建一個Web應用程序或類似的東西,你可以使用SpringFramework之類的依賴注入框架來實現這一點。

在需要的地方注入實例將意味着用一個虛擬實例替換此實例以進行測試會更容易,並且在測試過程中,您將能夠創建許多以不同方式配置的此類實例進行測試。

0

As 12dollar說:使用Singleton設計模式,並要求該實例的單例類:

public class ClassicSingleton { 
    private static ClassicSingleton instance = null; 
    protected ClassicSingleton() { 
     // Exists only to defeat instantiation. 
    } 
    public static ClassicSingleton getInstance() { 
     if(instance == null) { 
     instance = new ClassicSingleton(); 
     } 
     return instance; 
    } 
} 

然後,你可以叫getInstance()

0

最好的設計是讓你的課程成爲單身人士課程。 對於您的使用情況,我認爲你可以按照下面的步驟,

  • 讓你的構造函數爲私有。
  • 然後,在該類中有一個靜態函數來返回類的實例化對象。

  • 你可以擁有自己的if(classobj == nul)檢查來驗證它是否已經實例化(僅在第一次調用時它將爲空,進一步調用它不會爲空)並返回該對象。

乾杯:)

相關問題