原文 第1章 單例模式(single pattern)
單例模式就是保證在整個應用程式的生命週期中,在任何時刻,被指定的類只有乙個例項,並為客戶程式提供乙個獲取該例項的全域性訪問點。
一、常用模式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public
class
singleton
public
static
singleton getinstance()
return
instance;
}
}
這種模式只適用在單執行緒下,並沒有考慮到執行緒併發的問題,在多執行緒中,可能出現兩個執行緒同時獲取instance的例項,可能會出現多個例項物件。
二、多執行緒下lazy模式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public
class
singleton
public
static
singleton getinstance()
}
}
return
instance;
}
}
使用了lock鎖,可以較好的解決多執行緒下單例模式的實現,lock鎖保證同一時間內只有乙個執行緒能訪問lock裡面的語句塊,比較有效的解決效能的開銷。
三、餓漢模式
1
2
3
4
5
6
7
8
9
10
11
12
13
public
sealed
class
singleton
public
static
singleton getinstance()
}
該類標記為sealed以阻止發生派生,而派生可能會增加例項。使用的readonly關鍵可以跟static一起使用,用於指定該常量是類別級的,它的初始化交由靜態建構函式實現,並可以在執行時編譯。在這種模式下,無需自己解決執行緒安全性問題,clr會給我們解決。由此可以看到這個類被載入時,會自動例項化這個類,而不用在第一次呼叫getinstance()後才例項化出唯一的單例物件。
四、延遲載入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public
sealed
class
singleton
public
static
singleton instance
}
class
nested
internal
static
readonly
singleton instance =
new
singleton();
}
}
這種方法用的比較的少,但是也是一種不錯的方法。
設計模式系列文章入口:
設計模式第1式 單例模式
所謂單例模式,就是採用一定方式,保證在整個系統中,對於某個類只有乙個物件存在,且該類只提供乙個獲取物件例項的方法。比如hibernate的sessionfactory,他充當資料儲存源的 並負責建立session物件。sessionfactory並不是輕量級的,一般情況下,乙個專案通常只需要乙個se...
1 單例模式
乙個類只能有乙個例項。比如印表機這種東西。trick在於 變數,構造方法都必須為private,所以其他類new它的構造方法是不行的,直接呼叫變數也不行。只能呼叫getinstance 方法 其他被public修飾的方法。getinstance 方法記得用public修飾。原理 public cla...
1 單例模式
某個物件只需要乙個例項的情況,比方說gamemanager,resourcemanagerusing system namespace 單例模式 定義公有方法提供乙個全域性訪問點,同時你也可以定義公有屬性來提供全域性訪問點 public static singleton getinstance 構造...