//懶漢式
private static readonly object obj = new object();
private static DbConnection dbConnection;
private DbConnection()
{
}
public static DbConnection getDbConnection()
{
if (dbConnection == null)
{
lock (obj)
{
if (dbConnection == null)
{
dbConnection = new DbConnection();
}
}
}
return dbConnection;
}
public void openConnection()
{
Console.WriteLine("開啓數據庫連接");
}
//餓漢式
private static readonly DbConnection dbConnection = new DbConnection();
private DbConnection()
{ }
public static DbConnection getDbConnection()
{
return dbConnection;
}
public void openConnection()
{
Console.WriteLine("開啓數據庫連接");
}
//懶漢式
//DbConnection dbConnection= DbConnection.getDbConnection();
//DbConnection dbConnection2 = DbConnection.getDbConnection();
//dbConnection.openConnection();
//if (dbConnection == dbConnection2)
//{
// Console.WriteLine("相同的");
//}
//Console.ReadLine();
//餓漢式
DbConnection dbConnection = DbConnection.getDbConnection();
DbConnection dbConnection2 = DbConnection.getDbConnection();
if (dbConnection == dbConnection2)
{
Console.WriteLine("相同的");
}
Console.ReadLine();
總結:保證類只有一個實例(自己完成自己的實例化),並且 提供一個全局訪問點。
懶漢式:在第一次被引用的時候實例化,不提前佔資源,但需要雙重鎖保證線程安全。
餓漢式:被加載時實例化,需要提前佔用資源。
與靜態方法區別:
1、靜態方法裏面的對象使用過後會釋放,頻繁使用釋放也耗資源;單例由於有一個實例化,會一直存在。
2、單例可以繼承類,實現接口,方法可以被重載。
3、單例比靜態方法更靈活。