《大話設(shè)計(jì)模式》閱讀筆記和總結(jié)。原書是C#編寫的窄坦,本人用Java實(shí)現(xiàn)了一遍唤反,包括每種設(shè)計(jì)模式的UML圖實(shí)現(xiàn)和示例代碼實(shí)現(xiàn)。
目錄:設(shè)計(jì)模式
Github地址:DesignPattern
定義:單例模式(Singleton)鸭津,保證一個(gè)類僅有一個(gè)實(shí)例彤侍,并提供一個(gè)訪問它的全局訪問點(diǎn)。
UML圖:
單例模式UML圖.png
代碼實(shí)現(xiàn):
Singleton類逆趋,定義一個(gè)getInstance操作盏阶,允許客戶訪問它的唯一實(shí)例。
public class Singleton {
private static Singleton instance;
// 構(gòu)造方法private闻书,這就堵死了外界利用new創(chuàng)建此類實(shí)例的可能
private Singleton(){}
// 獲取本類實(shí)例的唯一全局訪問點(diǎn)
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
客戶端代碼
public class Main {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
if (s1 == s2) {
System.out.println("兩個(gè)對象是相同的實(shí)例");
}else{
System.out.println("兩個(gè)對象是不同的實(shí)例");
}
}
}
運(yùn)行結(jié)果
兩個(gè)對象是相同的實(shí)例
線程安全的單例模式
public class SSingleton {
private volatile static SSingleton singleton;
private SSingleton() {
}
public static SSingleton getInstance(){
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new SSingleton();
}
}
}
return singleton;
}
}