麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(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ā)表
主站蜘蛛池模板: 中文字幕网址 | 天天色综合2 | 精品一区二区三区在线观看视频 | av在线播放免费 | 污黄视频在线观看 | 亚洲综合精品成人 | 看91视频| 久久精品亚洲成在人线av网址 | 天天色图片 | 草逼一区 | 日本高清com | 91精品久久久久久久久网影视 | 九九热精品免费视频 | 日韩激情一区二区三区 | 竹内纱里奈和大战黑人 | 色网站在线免费观看 | 成人在线视频一区 | 91av资源在线 | 国产乱淫av | 91成人影库| 久久av一区二区 | 日韩黄色免费电影 | 九九视屏 | 欧美一级做性受免费大片免费 | 免费欧美精品 | 9999久久久久久 | 中文字幕亚洲一区二区三区 | 久久久久久久.comav | 在线91视频 | 亚洲成人入口 | 亚洲一区二区三区四区精品 | 久久久久成人免费 | 成人毛片免费看 | av在线播放免费观看 | 内地av在线 | www.com香蕉 | 蜜桃网站免费 | 97风流梦电影 | h视频在线免费看 | 日韩一级精品 | 男女羞羞视频在线免费观看 |