標籤:允許 分析 單例設計模式 無法 類別關係 構造方法 餓漢式 span strong
* 設計模式:前人總結出來的經驗,被後人直接拿來使用.
* 單例設計模式:一個類只允許有一個對象,將這個對象作為一個全域的訪問點,提供出去供大家使用.
* 分析:
* 1.使用者只能有一個對象
* 2.全域的訪問點:得到的對象就是全域的訪問點. 如何做到全域?讓static去修飾
* 3.如何提供出去?
* 4.供大家使用?--單例的功能
* 單例類的作用:
* 1.可以實現兩個對象之間的傳值
* 2.可以在全域範圍內調用很多的功能.
* 好處:可以讓兩個對象在完全沒有關係的前提下,實現值的傳遞,降低了耦合性,提高了內聚性
* (耦合性,內聚性在微觀上說:描述的是類與類之間的關係。好處:我們應該盡量提高內聚性,減少耦合性,可以提高程式的健壯性,增加代碼的可移植性,方便實現模組兒化編程
* 如何做到低耦合高內聚? 在處理類與類別關係的時候,讓類之間的關係越緊密耦合性越高,內聚性越低.反之,關係越鬆散耦合性越低,內聚性越高.)
*/
分類:餓漢式、懶漢式:格式都差不多,懶漢式有一個判斷,但是兩者的大體架構都這樣,實在不理解可以背下來以後會明白的。
1、餓漢式-在定義變數的同時完成初始化
class SingleInstance{//建立單例類
//2.在類的內部建立一個當前類型的屬性並賦值--在類的內部得到了當前類的一個對象
//將變數私人化,讓外界無法直接存取 給變數用static修飾讓他成為全域的訪問點
private static SingleInstance singleInstance = new SingleInstance();
//1.將構造方法私人化
private SingleInstance() {
}
//3.使用公用的方法將變數提出出去,並將方法設定成靜態
public static SingleInstance getInstance(){
return singleInstance;
}
}
2、懶漢式-開始只是定義變數,什麼時候使用什麼時候賦值
class SingleInstance1{
private static SingleInstance1 singleInstance = null;//先不賦值
private SingleInstance1() {
}
public static SingleInstance1 getInstance(){
if (singleInstance == null) { //判斷是否為空白
singleInstance = new SingleInstance1();//用的時候再賦值
}
return singleInstance;
}
int num;//這個num供之後的舉例使用
}
//主函數:
public class Demo5 {
public static void main(String[] args) {
SingleInstance1 s1 = SingleInstance1.getInstance();
SingleInstance1 s2 = SingleInstance1.getInstance();
System.out.println(s1 == s2);//運行後輸出true,說明擷取到的是同一個對象
//執行個體:
//功能:將A類中num1的值傳給B類對象的num2
A a = new A();
a .num1 = 4;
B b = new B();
// b.num2 = a.num1; 方法一:直接賦值,一般類的成員變數是私人的,所以不推薦
// b.test(a); 方法二:通過傳參間接賦值
// 方法三:通過單例實現傳值 :
a.ceshi1();
b.ceshi2();
}
}
//測試單例的功能
class A{
int num1;
//測試通過單例傳值
public void ceshi1() {
SingleInstance1 s1 = SingleInstance1.getInstance();
s1.num = num1; //把num1傳給num
}
}
class B{
int num2;
//通過傳參賦值
public void test(A a){
num2 = a.num1;
}
//測試通過單例傳值
public void ceshi2(){
SingleInstance1 s2 = SingleInstance1.getInstance();
num2 = s2.num;//把num傳給num2
}
}
文章原創,轉載請註明出處謝謝
java單例設計模式總結及舉例