2013-04-14 84 views
2

我的目標是使用試穿與資源結構與類的一個實例,即一個,處理連接池。我需要這個來確保連接池在所有事情結束時都關閉,然後我想用嘗試使用資源。例如。定義一個單獨的Java進行嘗試,與資源的目的

public class MyHandler implements java.io.Closeable{ 

    public static ConnectionPool pool; 

    //Init the connection pool 
    public MyHandler(){ 
     pool = ...; 
    } 

    @Override 
    public void close() { 
     pool().close();  
    } 
} 

,其中一個可能是main

public static void main(String [] args){ 
    try(MyHandler h = new MyHandler){ 
    //execute my code 
    // somewhere I do MyHandler.pool.something(); 
    } 
} 

我怎樣才能確保在MyHandler的作爲單身?

回答

5

我見過確保一類是單的常用方法是設置它的構造私有,然後使用一個公共的getInstance方法來檢索單。

public class MyHandler implements java.io.Closeable { 
    private static MyHandler singleton = new MyHandler(); 
    private MyHandler() {} 
    public static MyHandler getInstance() { 
     return singleton; 
    } 

    @Override 
    public void close() { 
     //close stuff 
    } 
} 

try(MyHandler h = MyHandler.getInstance()){ } 

Spring Framework也有一個很好的定義單身系統。

+0

如果我理解你的榜樣,我想,'singleton'必須聲明'static'!不是嗎? –

+0

是的,我的錯誤 –

+0

我會接受你的答案。這是更完整的,並已作爲第一!謝謝! –

1

如果你需要的是一個單獨的類,你應該讓你的構造函數的私人和建立()稱爲的getInstance公共法和私人MyHandler的屬性實例(或任何名稱你想要的)。然後,如果實例爲null或未定義,則getInstance方法將調用構造函數「MyHandler()」。最後,它返回實例屬性。

1

有很多方法來聲明一個類單身,但這種方法也有侷限性。單身主義最好的方法是ENUM。聲明ENUM和剩下的東西將被自動處理。

+0

請問,你能舉個例子嗎?此外,我有一些麻煩可能不止一次地返回一個單身人士!如果我不止一次地將單例傳遞給try-with-result塊,會發生什麼? close()會被多次調用嗎?如果MyHandler的構造函數被多次調用,我會變得認爲我需要拋出異常! –

+0

是的。但是太晚了。我們在印度,我會用例子給你添加一些示例代碼。 –

+1

@mat_boy [here](http://stackoverflow.com/a/71399/1393766)你有ENUM用作Singleton的例子。 – Pshemo