單例模式的深刻理解及最優法例子

2021-07-25 21:03:45 字數 2248 閱讀 3895

懂的越多,發現所知越少。是時候豐富下基礎知識了,以下也是網上歸納總結的知識點。主要歸納幾點

第一:單例模式概念;第二:單例模式的特點及核心知識;第三:最優法單例模式例子;第四:使用單例和不使用單例模式 到底有什麼區別(**舉例)

二、單例模式的特點:

1、單例類只能有乙個例項。

2、單例類必須自己自己建立自己的唯一例項。

3、單例類必須給所有其他物件提供這一例項。

單例模式shou的核心知識:

(1) 將採用單例設計模式的類的構造方法私有化(採用private修飾)。

(2) 在其內部產生該類的例項化物件,並將其封裝成private static型別。

(3) 定義乙個靜態方法返回該類的例項。

三、單例模式最優方案例子

package com.test.api;

/**

* 方法四

* 單例模式最優方案

* 執行緒安全 並且效率高

* */

public class singletontest

//定義乙個靜態私有變數(不初始化,不使用final關鍵字,使用volatile保證了多執行緒訪問時instance變數的可見性,避免了instance初始化時其他變數屬性還沒賦值完時,被另外執行緒呼叫)

private static volatile singletontest instance;

//定義乙個共有的靜態方法,返回該型別例項

public static singletontest getistance(string str)

}

}

return instance;

}

}

四、使用單例和不使用單例模式 到底有什麼區別(**舉例)

********************===首先,先看看平常我們寫的**(不使用單例模式)

實體類:

public class notsingletontest 

public void setname(string name)

public void test()

}

測試類:

public static void main(string args) else if(not1 != not2)

}

最後輸出的是  :

this is 1

this is 2

different instance2

***************然後,我們再看使用單例模式會有什麼效果

實體類:

package com.test.api;

/**

* 方法四

* 單例模式最優方案

* 執行緒安全 並且效率高

* */

public class singletontest

public void setname(string name)

// 定義乙個私有構造方法

private singletontest()

//定義乙個靜態私有變數(不初始化,不使用final關鍵字,使用volatile保證了多執行緒訪問時instance變數的可見性,避免了instance初始化時其他變數屬性還沒賦值完時,被另外執行緒呼叫)

private static volatile singletontest instance;

//定義乙個共有的靜態方法,返回該型別例項

public static singletontest getistance(string str)

}

}

return instance;

}

public void test()

}

測試類:

public static void main(string args) else if(sin1 != sin2)

}

最後輸出的是:

this is 2

this is 2

same instance1

總結: 看出來了吧,使用了單例模式,顧名思義保證呼叫這個類的時候,只例項化一次。因此輸出的都是this is 2

參考原文:

單例模式的理解

單例模式 乙個類只有乙個例項化物件,只提供乙個全域性訪問點。全域性只有乙個例項,只從乙個地方訪問,使用起來就非常的簡單方便,保證了訪問點的唯一性和一致性,很容易為人熟知。但是單例是沒有從屬的,自己管理自己的生命週期,等同於程式的生命週期,在程式執行過程中一直存在。這樣說來的話,就有一些弊端在裡邊,我...

單例模式的理解

在面試中,遇到手寫乙個單例,平時敲 沒問題,但是手寫。亂七八糟,所以回來以後整理下單例 文章學習於 單例流程 1.私有構造方法 2.建立單例物件 3.為外界提供獲取單例物件的方法 隨著不斷的優化,單例模式也越加豐富多彩。下面是我為聯絡手感而附上的 created by 餓漢式 優點 簡單,執行緒安全...

Java單例設計模式解析及小例子

必須對於多個程式使用同乙個配置資訊物件時,就需要保證該物件的唯一性。如何保證物件唯一性呢?1,不允許其他程式用new建立該類物件。2,在該類建立乙個本類例項。3,對外提供乙個方法讓其他程式可以獲取該物件。步驟 1,私有化該類建構函式。2,通過new在本類中建立乙個本類物件。3,定義乙個公有的方法,將...