了解本文的例子 編者按:程序中經常有這樣的要求,整個程序運行時只有一個實例被使用。比如:數據庫連接池,系統參數配置,Java API 中的 Runtime, Calendar ...如何實現這種需求成為一個值得討論的問題。讓我們來看看本文的例子。 A.常見的例子 以往的做法,是在程序的某個類里面(比如是 GlobalObject )建立一個這個此種類的實例,然后規定所有需要用到此類的,都從 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 } }
但這樣做有如下缺點: 其他人可能 調用 ConnectionPoolManager 的構造函數自己建立一個 數據庫連接池,導致程序中存在多個 ConnectionPoolManager,人為的規定往往得不到好的實施。 GlobalObject 其實就是一個 C 語言中的全局變量,與面向對象的方法相沖突。
|