明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

Singleton在Java中的應(yīng)用

[摘要]了解本文的例子  編者按:程序中經(jīng)常有這樣的要求,整個(gè)程序運(yùn)行時(shí)只有一個(gè)實(shí)例被使用。比如:數(shù)據(jù)庫連接池,系統(tǒng)參數(shù)配置,Java API 中的 Runtime, Calendar ...如何實(shí)現(xiàn)這種需求成為一個(gè)值得討論的問題。讓我們來看看本文的例子!    A.常見的例子  以往的做法,是在程序的...

  了解本文的例子

  編者按:程序中經(jīng)常有這樣的要求,整個(gè)程序運(yùn)行時(shí)只有一個(gè)實(shí)例被使用。比如:數(shù)據(jù)庫連接池,系統(tǒng)參數(shù)配置,Java API 中的 Runtime, Calendar ...如何實(shí)現(xiàn)這種需求成為一個(gè)值得討論的問題。讓我們來看看本文的例子。

   

  A.常見的例子

  以往的做法,是在程序的某個(gè)類里面(比如是 GlobalObject )建立一個(gè)這個(gè)此種類的實(shí)例,然后規(guī)定所有需要用到此類的,都從 GlobalObject 那里獲得,看下面的例子:

public class ConnectionPoolManager {
public ConnectionPoolManager {
// do some initialize work
}
public Connection getConnection(){
....
}
}

public class GlobalObject {
private ConnectionPoolManager connectionPoolManager;
public GlobalObject () {
connectionPoolManager = new ConnectionPoolManager();
...
}
public void getConnectionPoolManager() {
return connectionPoolManager;
}
}

public class QueryFunctions {
public static Collection findStudentByName(String name){
ConnectionPoolManager = globalObject.getConnectionPoolManager();
Connection connection = connectionPoolManager.getConnection();
// query database
}
}

  但這樣做有如下缺點(diǎn):

  其他人可能 調(diào)用 ConnectionPoolManager 的構(gòu)造函數(shù)自己建立一個(gè) 數(shù)據(jù)庫連接池,導(dǎo)致程序中存在多個(gè) ConnectionPoolManager,人為的規(guī)定往往得不到好的實(shí)施。

  GlobalObject 其實(shí)就是一個(gè) C 語言中的全局變量,與面向?qū)ο蟮姆椒ㄏ鄾_突。