設計模式 單例

2022-07-05 02:45:21 字數 2342 閱讀 5482

單例模式(singletonpattern),保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。

單例模式有 3 個特點:

在很多比較大型的程式中,全域性變數經常被用到。如果不用全域性變數,那麼在使用到的模組中,都需要用引數將全域性變數傳入,這是非常麻煩的。雖然要減少使用全域性變數,但是如果需要,還是要用。單例模式就是對傳統的全域性的一種改進。單例可以做到延時例項化,即在需要的時候才進行例項化。針對一些大型的類,延時例項化是有好處的。

/**

* 餓漢式單例

* 執行緒安全

*/public class singleton1

// 提供全域性訪問點獲取唯一的例項

public static singleton1 getinstance()

}

/**

* 雙重檢查單例(懶漢式)

* 執行緒安全

* 單例例項在第一次使用時進行建立

*/public class singleton2

public static singleton2 getinstance() }}

return instance;}}

/**

* 靜態內部類單例(登記式、延遲載入)

*/public class singleton3

/*** 靜態內部類

* 所以,這種寫法,仍然是一種懶漢式的單例類。

*/private static final singleton3 instance = new singleton3();

}/**

* 為什麼這樣寫就是執行緒安全的呢?

* 因為類的載入的過程是單執行緒執行的。它的併發安全是由jvm保證的。

* 所以,這樣寫的好處是在instance初始化的過程中,由jvm的類載入機制保證了執行緒安全,

* 而在初始化完成以後,不管後面多少次呼叫getinstance方法都不會再遇到鎖的問題了。

** @return

*/public static singleton3 getinstance()

}

/**

* 列舉單例

* 執行緒安全

*/public class singleton4

public static singleton4 getinstance()

// 列舉例項是static final型別的,也就表明只能被例項化一次。

// 在呼叫構造方法時,我們的單例被例項化

private enum singleton

public singleton4 getinstance() }}

/**

* 用反射來獲得例項

*/public class singleton5

}

結果輸出false,說明reflectinstance和instance不是同乙個物件。(==比較的是例項物件的記憶體位址)

/**

* 反序列化來獲得例項

*/public class singleton6

}

結果輸出false,說明singleton和instance指向不同物件。

修改單例類,解決反序列化的問題

/**

* 餓漢式單例

* 執行緒安全

*/public class singleton1 implements serializable

// 提供全域性訪問點獲取唯一的例項

public static singleton1 getinstance()

//該方法在反序列化時會被呼叫,該方法不是介面定義的方法,有點兒約定俗成的感覺

protected object readresolve() throws objectstreamexception

}

結果輸出

呼叫了readresolve方法!

true

單例模式可以避免例項物件的重複建立,不僅可以減少每次建立物件的時間開銷,還可以節約記憶體空間。有以下場景的特點即可使用單例。

當物件需要被共享的場合。由於單例模式只允許建立乙個物件,共享該物件可以節省記憶體,並加快物件訪問速度。如資料庫的連線池、zk分布式鎖、工具類等。

當某類需要頻繁例項化,而建立的物件又頻繁被銷毀的時候,如多執行緒的執行緒池、網路連線池等。

單例設計模式(餓漢單例設計模式 懶漢單例設計模式)

1.什麼是單例 單例的意思是乙個類永遠只存在乙個物件,不能建立多個物件。2.為什麼要用單例 開發中有很多的物件我們只需要乙個,例如虛擬機器物件,任務管理器物件 物件越多越佔記憶體,有時候只需要乙個物件就可以實現業務,單例可以節省記憶體空間。3.如何實現單例 單例的實現方式有 餓漢單例設計模式 通過類...

設計模式 單例設計模式

歷史 最早是建築學領域的模式,然後gof四人由其引申到編碼方面,總結了23種設計模式 設計模式 解決某一類事情最行之有效的方法 2.1 體現 餓漢式,保證物件的唯一性 class singleton 私有化建構函式禁止該類建立物件 private static singleton st new si...

設計模式 單例設計模式

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項 單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。單例設計模式 解決的問題 可以保...