單一設計模式

2021-05-24 11:25:35 字數 1088 閱讀 1740

單一設計模式,顧名思義就是產生乙個物件到單一例項,算是設計模式中最簡單也是最容易理解的一種模式了。單一設計模式的設計很簡,單目前主要有兩種方法,要注意的是要把類到建構函式設為私有的,防止物件可以直接new乙個例項出來,下面一種是很常見到一種。

這種設計方法,很簡單也很清晰,當要產生乙個例項的時候,只要呼叫 singletonpattern  single = singletonpattern.getinstance();就可以了。當要產生乙個singletonpattern物件的時候,首先會判斷single 是否為null,當第一次產生singletonpattern物件的時候,single肯定為null,然後就會new 乙個singletonpattern物件來,之後在需要產生singletonpattern物件的時候,就不會重新new乙個新的物件出來,用的還是第一次產生的物件,因為我們的single是乙個static變數,所以只會被初始化一次。

這個方法設計出來的單例項模式,看上去很完美,沒有任何瑕疵,但是如果考慮到多執行緒的話可能就會出現乙個很隱晦的bug,也就是說單例項可能會失效,比如,有乙個執行緒呼叫上面的**產生乙個singletonpattern 物件s1,同時又有另乙個執行緒也恰好的也要產生乙個singletonpattern 物件s2,我們知道每次產生singletonpattern物件的時候,都會去判斷single是否為null,如果此時在產生s1的時候,single = new singletongpattern();還沒有執行完,另乙個執行緒中的s2,也恰執行到 null == single,這句,但是此時由於single 還沒有被賦值所以,產生s2物件的時候,也會進入if的語句裡面執行 single = new singletongpattern();這樣就會產生兩個例項,就會出現混亂的情況,針對這種情況的發生,第二種產生單例項模式的方法也就出現了

這個方法和上面的方法的區別主要

1、將single 設定成final型,防止被改變

2、產生物件的時候 用synchronized進行同步處理

這樣就可以很好的解決上面的問題了。

以前總是想學設計模式,但是學著學著就停下來了,一停下來,就會忘記,故想以寫部落格的形式來強制自己好好的靜下心來學習,今天就以最簡單、最常用的單例項來祭旗吧~

參考:設計模式之禪

單一設計模式 Singleton

什麼是singleton模式?sigleton模式的設計意圖是 保證乙個類只有乙個物件例項,並提供乙個訪問物件例項的全域性訪問點。如果我們想實現乙個全域性範圍可見的物件以替代麻煩纏身的全域性變數,那麼最好的做法就是將資料封裝在乙個特殊的類中。這個嚴格管理資料的建立過程以保證資料的唯一性,同時不允許程...

JAVA設計模式 單一職責模式

現實生活中我們現在擁有太多的各種各樣的產品,它們的功能很多各各樣,但是我們同時間也會發現在乙個產品當中 的每種功能,其實生活當中還是有對應一種功能的產品,而且可能這功能單一的產品比那功能多種多樣的產品還要貴 呢,所以說有的時候一種東西功能單一其實更加好用,比如手機有照相,上網,攝像等功能,但是它的這...

設計模式 單一職責原則

單一職責原則解釋 就乙個類而言,應該只有乙個引起它變化的原因。我們有時候在做程式設計的時候,很自然而然的會給乙個類增加這樣那樣的功能,比如 我們要做乙個 會給這樣乙個default.aspx.cs後台檔案加入演算法的 資料庫訪問的sql語句,業務邏輯的 等等都寫到這個類檔案中,這就意味著,無論任何需...