国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 喜德县| 常山县| 南汇区| 南漳县| 开鲁县| 湖南省| 南部县| 宝兴县| 叶城县| 伊宁县| 正安县| 拉萨市| 海口市| 固安县| 佛山市| 沛县| 革吉县| 唐山市| 海口市| 长子县| 潞城市| 万载县| 安福县| 郴州市| 股票| 阜宁县| 佛教| 乳源| 友谊县| 那曲县| 全南县| 云龙县| 昌邑市| 肥西县| 双城市| 辽宁省| 民和| 中牟县| 新河县| 临沭县| 博爱县|