1、為什麼設計成單例模式?
保證類在記憶體中只有乙個物件。例如:(runtime類)。
在計算機系統中,執行緒池、快取、日誌物件、對話方塊、印表機、顯示卡的驅動程式物件常被設計成單例。
2、單例模式設計的3種方式:
1、餓漢式(推薦使用)
public
class singleton
// 2,建立本類物件,定義static是為了可以使用 類名.方法 呼叫,定義private是為了不讓其他類訪問修改。
private
static singleton s = new singleton();
// 3,對外提供公共的訪問方法,定義static可以使用 類名.方法 呼叫,定義public為了讓其他類呼叫。
public
static singleton getinstance()
public
static
void
print()
}注意:餓漢式在類建立的同時就已經建立好乙個靜態的物件供系統使用,以後不再改變,所以天生是執行緒安全的。
2、懶漢式(存在多執行緒訪問問題,不建議使用)
public
class singleton
//2,建立本類物件,定義static是為了可以使用 類名.方法 呼叫,定義private是為了不讓其他類訪問修改。
private
static singleton s = null;
//3,呼叫的時候判斷。
public
static singleton getinstance()
return s;
}public
static
void
print()
}
注意:如果你想使用餓漢式,又想執行緒同步,可以加上同步鎖。
例如:
//在方法上加同步鎖
public
static
synchronized singleton getinstance()
return s;
}//或者,這樣雙重檢查鎖定
public
static singleton getinstance() }}
return s;
}
3、使用final修飾
class singleton
//final是最終的意思,被final修飾的變數不可以被更改
public
static
final singleton s = new singleton();
}備註:其實這種方式和餓漢式類似,都是開始就建立了乙個物件例項
3、餓漢式和懶漢式區別:
餓漢式優點:
天生就是執行緒安全的
在第一次呼叫時速度也會更快,因為其資源已經初始化完成
餓漢式缺點:
會佔據一定的記憶體
懶漢式優點:
會節省一點記憶體
懶漢式缺點:
執行緒不安全,如果加同步syncronized的也會影響效能
第一次使用的時候才new,會出現一些載入延遲,特別是需要載入的資源比較多的時候
Java設計模式(1) 單例模式
singleton是一種建立型模式,指某個類採用singleton模式,則在這個類被建立後,只可能產生乙個例項供外部訪問,並提供乙個全域性的訪問點。核心知識點 1.將採用單例設計模式的類的構造方法私有化 採用private修飾 2.在其內部產生該類的例項話物件,並將其封裝成private stati...
java設計模式 單例設計模式
public class main 餓漢式 空間換時間 多執行緒訪問不會建立多個物件 author admin class singleton 2建立本類物件 private static singleton s new singleton 3對外提供公共的訪問方法 public static si...
設計模式(1) 單例設計模式
單例設計模式 定義 確保乙個類只有乙個例項,並且自行例項化,並向整個系統提供這個例項。餓漢式 class single 通過該方法獲得例項物件 public single getinstance 類中其他方法盡量使用static public static void say 通過定義乙個私有訪問許可...