国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

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

2019-11-18 14:17:49
字體:
供稿:網(wǎng)友

  Singleton 模式在 java 中的應(yīng)用

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

以往的做法,是在程序的某個類里面(比如是 GlobalObject )建立一個這個此種類的實例,然后規(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ào)用 ConnectionPoolManager 的構(gòu)造函數(shù)自己建立一個 數(shù)據(jù)庫連接池,導(dǎo)致
程序中存在多個 ConnectionPoolManager,人為的規(guī)定往往得不到好的實施。
GlobalObject 其實就是一個 C 語言中的全局變量,與面向?qū)ο蟮姆椒ㄏ鄾_突。


因此,可以使用 設(shè)計模式 中的 Singleton (單件)模式來完成以上的需求:
Java API 中的 Runtime 等等用的就是這種方法。
代碼如下:

public class ConnectionPoolManager {
private static instance = null;
private ConnectionPoolManager() {
// do some initialize work
}
public static void getInstance() {
if (instance == null){
instance = new ConnectionPoolManager();
}
return instance;
}
public Connection getConnection(){
}
}

ConnectionPoolManager 的使用

public class QueryFunctions {
public static Collection findStudentByName(String name){
ConnectPoolManager connectionPoolManager = ConnectionPoolManager.getInstance();
Connection conn = connectionPoolManager.getConnection();
// query database
}
}

1.instance 是私有的,開始時賦值為 null,外部只有通過 getInstance 方法才能獲得他。
2.構(gòu)造方法是私有的,這點很重要,保證只有這個類自己才能夠調(diào)用,其他的類無法調(diào)用此構(gòu)造函數(shù)。
3.getInstance 方法中:
if 語句,保證只有一個 instance 存在
唯一的一個 ConnectionPoolManager 在第一次調(diào)用的時候被建立。

下面是另一個例子: java.lang.Runtime
我剛看了 Runtime 的實現(xiàn)如下:

public class Runtime {
private static Runtime currentRuntime = new Runtime();
public static Runtime getRuntime() {
return currentRuntime;
}
/** Don´t let anyone else instantiate this class */


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 哈密市| 长葛市| 锡林浩特市| 长寿区| 昌平区| 惠东县| 陇西县| 繁昌县| 佛冈县| 合肥市| 昌黎县| 黄浦区| 河津市| 罗城| 上思县| 叶城县| 建昌县| 治县。| 天津市| 苗栗县| 资阳市| 滦平县| 西乌| 武清区| 临潭县| 中山市| 中阳县| 信阳市| 双辽市| 大厂| 克什克腾旗| 新河县| 邓州市| 玉溪市| 石林| 安岳县| 江口县| 沁阳市| 龙井市| 台东市| 缙云县|