1. 程式人生 > >jdbc設計模式之單例模式

jdbc設計模式之單例模式

單例模式

作為一種常見的設計模式,單例模式的設計概念是"兩個私有,一個公有",即私有屬性/成員變數和私有構造,以及公有方法,常用於在整個程式中僅呼叫一次的程式碼。

具體操作

描述

從單例模式的描述來看,單例模式並不能用於多次頻繁呼叫的設計中,而更適用於程式開頭,用於讀取資源作啟動作用的設計,在這裡我們使用讀取資料庫的使用例項做例子。

例程式碼

package com.mannoroth.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;




public
class ConfigManager { //建立私有屬性及成員變數 private static ConfigManager configManager; private static Properties properties ; //建立私有構造 private ConfigManager(){ InputStream is = null; try { //建立·properties·做Properties物件 properties = new Properties(); is
= ConfigManager.class.getClassLoader().getResourceAsStream("database.properties"); properties.load(is); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { if (is != null) { is
.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } //公有方法,開啟一個口使外部程式得以呼叫 public static ConfigManager getInstance(){ if (configManager == null) { configManager = new ConfigManager(); } return configManager; } //通過輸入key的值,從檔案中獲得對應的值 public static String getValues(String key){ return properties.getProperty(key); } }

單例模式的公有方法存在兩個模式,分別為:

1.懶漢模式

//在第一次呼叫的使用(configManager==null),使自己例項化
public static synchronized ConfigManager getInstance(){

            if (configManager==null) {
                configManager=new ConfigManager();
            }

        return configManager;
    }
上述模式存在缺點,當該模式被多執行緒同時使用的時候,有可能會因此出現混亂,使兩者交錯,這時候我們可以通過使用再新增一重鎖定(synchronized)的屬性來保證執行緒安全。

解決方法:使用雙重鎖定

//在方法呼叫中再加入一重synchronized屬性
public static synchronized ConfigManager getInstance(){
        synchronized (ConfigManager.class) {
            if (configManager==null) {
                configManager=new ConfigManager();
            }
        }
        return configManager;
    }

2.餓漢模式

public static ConfigManager getInstance(){
        if (configManager==null) {
            configManager=new ConfigManager();
        }
        return configManager;
    }
餓漢模式在建立的同時就提供了一個靜態物件供程式呼叫,不會再發生變化,足矣保證現成安全。

兩種模式的區別:

餓漢模式:類一旦載入,就把單例初始化完成,保證getInstance的時候,單例是已經存在 
懶漢模式:只有當呼叫getInstance的時候,才會去初始化這個單例。