java設計模式中的單例模式,收藏起來慢慢看!

2021-01-10 IT圈不亂

在java中,單例模式算是比較基礎和簡單的,今天就來簡單聊聊什麼是單例模式。比如說,一個應用程式中,某個類的實例對象只有一個,而我們沒有辦法new,因為構造器已經被private聲明了,通過getInstance()的方法可以獲取它們的實例。getInstance()的返回值是一個對象的引用,並不是一個新的實例,這點要注意理解,不要錯誤的認為是多個對象。

單例模式

代碼例子:

public class Singleton {private static Singleton singleton;private Singleton() {}public static Singleton getInstance() {if (singleton == null) { singleton = new Singleton(); } return singleton;}}

這是最基本的寫法,非常簡單但是線程不安全。其實還有另外幾種寫法:

public class Singleton { private static Singleton instance; private Singleton (){} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }

這也是基本的寫法,但是這樣寫的線程是安全的。在這些基礎的寫法之上,偉大的程式設計師們又開發出來幾種別的新花樣,如:

餓漢式寫法:

public class Singleton {

private static Singleton instance = new Singleton(); private Singleton (){} public static Singleton getInstance() { return instance; } }

靜態內部類

public class Singleton {

private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } private Singleton (){} public static final Singleton getInstance() { return SingletonHolder.INSTANCE; } }

靜態內部類

枚舉

public enum Singleton {

INSTANCE; public void whateverMethod() { } }

這種方式能避免多線程同步問題,還能防止反序列化重新創建新的對象。

雙重校驗鎖

public class Singleton {

private volatile static Singleton singleton; private Singleton (){} public static Singleton getSingleton() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }

IT圈不亂

對於初學者來說,首先要弄懂最基本的寫法是什麼意思,然後再去嘗試更多的寫法,就一通百通了。有想法的朋友們,歡迎在評論區留言討論,也可以關注我的百家號:IT圈不亂!

相關焦點

  • Java的單例模式
    一、什麼是單例模式?
  • Java單例模式深入詳解
    我主要是應用在使用普通類模擬枚舉類型裡,後來發現這就是傳說中的單例模式。構造函數弄成private 就是單例模式,即不想讓別人用new 方法來創建多個對象,可以在類裡面先生成一個對象,然後寫一個public static方法把這個對象return出去。
  • 單例(Singleton)設計模式及在Java中的實現
    設計模式(Design Pattern)是在經過大量的實踐後總結出來,並且經過理論化分析優選出的編程風格、代碼結構以及解決問題的思考方式。一、何為單例模式?在編程世界中,目前經典的共有23種設計模式,單例模式只是其中一種。
  • 設計模式一:單例模式
    什麼是單例模式單例模式是指系統中的某個類只能有一個對象實例。
  • Android設計模式(1)——單例模式
    單例模式的UML類圖 實現單例模式主要有如下幾個關鍵點:構造函數不對外開放,一般為Private通過一個靜態方法或者枚舉返回單例對象確保單例類的對象有且只有一個,尤其在多線程環境下確保單例對象在反序列化時不會重新構建對象示例示例類圖:  示例實現代碼//普通員工類public class Staff
  • 大神詳解,這麼詳細的Java設計模式不收藏可惜了
    引子設計模式是很多程式設計師總結出來的優秀實踐。曾經在剛開始寫項目的時候學習過設計模式,在開發過程中,也主動或者被動的使用過。現在寫代碼雖說不會特意明確在用哪種設計模式,但潛移默化的寫出來公認的優秀實踐代碼,畢竟看的比較清爽。
  • 設計模式:單例模式
    基本概念1.1 原理單例模式可以說是所有設計模式中最簡單的一個了,這裡我們先直接給出它的概念然後再對它進行詳細的講解。單例模式就是:一個類只能有一個實例,並提供對該實例的全局訪問點。通俗地說,就是一個類只能創建一個對象,並且在程序的任何地方都能夠訪問到該對象。在某些情況下一些類只需要一個實例就夠了,我們以一個簡化的文件管理器作為例子來說明。
  • Java Singleton設計模式DEMO
    當您只想擁有給定類的一個實例時,將使用單例設計模式。它是一種創造性的設計模式,我們處理對象的創建。動機和現實世界的例子在面向對象的設計中,某些類只有一個實例非常重要。那是因為它們代表了一種獨特的東西,這是同類產品中的一種。
  • Python設計模式之單例模式
    Pattern)是最常用的一種設計模式,是一種非常常用的創建型設計模式。什麼場景會用到單例模式呢?就是在系統工程中只想創建單個實例對象,比如資料庫連接池,Redis連接池,服務監控中心等。這個場景下,如果存在多個實例對象,那麼會有無法預測的異常。同時,在設計單例模式時,需要考慮的很重要的因素就是並發性,即多線程調用時是否會存在多個線程。那麼,如何設計使用單例模式呢?
  • 從Java類庫看設計模式
    為了解決這樣的問題,人們提出了所謂的模式的概念。所謂模式,是指在一個特定背景下,反覆出現的問題解決方案。模式是經驗的文檔化。  軟體模式的概念現在比較的廣泛,涉及到分析,設計,體系結構,編碼,測試,重構等軟體構造生命期中的各個部分。這兒主要討論的是設計模式,指的是在軟體設計過程中反覆出現的一些問題的解決方法了。
  • 高並發下線程安全的單例模式(最全最經典,值得收藏)
    在所有的設計模式中,單例模式是我們在項目開發中最為常見的設計模式之一,而單例模式有很多種實現方式,你是否都了解呢?高並發下如何保證單例模式的線程安全性呢?如何保證序列化後的單例對象在反序列化後任然是單例的呢?這些問題在看了本文之後都會一一的告訴你答案,趕快來閱讀吧!什麼是單例模式?
  • 你真的理解了java單例模式嗎?講別人都忽略的細節
    前言:老劉這篇文章敢做保證,java的單例模式講的比大多數的技術博客都要好,講述別人技術博客都沒有的細節!!!1 java單例模式直接講實現單例模式的兩種方法:懶漢式和餓漢式,單例模式的概念自己上網搜吧這裡就不講了!
  • 大話設計模式之愛你一萬年:第二章 創建型模式:單例模式::我的女朋友只有你一個:3.4.5.單例模式的實現-餓漢/靜態/枚舉
    >👇)國內最全的Spring Boot系列之三2020上半年發文匯總「值得收藏」SpringBoot框架開發的優秀的項目「值得收藏學習」 - 第3351天學會別人1個月學會的設計模式大話設計模式之愛你一萬年:第一章 設計模式基本概念:
  • 設計模式大冒險第四關:單例模式,如何成為你的「唯一」
    這一篇文章是關於設計模式大冒險系列的第四篇文章,這一系列的每一篇文章我都希望能夠通過通俗易懂的語言描述或者日常生活中的小例子來幫助大家理解好每一種設計模式。今天這篇文章來跟大家一起學習一下單例模式。相信讀完這篇文章之後,你肯定會有所收穫的。關於單例模式,這應該是設計模式中最簡單的一種了。
  • Java 實現單例模式的 9 種方法
    什麼是單例模式二. 單例模式的特點三. 單例模式VS靜態類四. 單例模式的實現一. 什麼是單例模式因進程需要,有時我們只需要某個類同時保留一個對象,不希望有更多對象,此時,我們則應考慮單例模式的設計。二. 單例模式的特點單例模式只能有一個實例。單例類必須創建自己的唯一實例。
  • java 23種設計模式及其在spring,tomcat,jdk中的應用
    設計模式是前人(一般都是大師)對程序設計經驗的總結,學習並應用設計模式可以使我們開發的項目更加規範、便於擴展和維護,這大概是為什麼設計模式基本是面試必問的原因吧!本文主要內容有四部分:設計原則、設計模式分類、23種設計模式、設計模式應用。設計模式雖多,但重要的、主流開源框架應用較多的往往就那幾個。
  • 詳解設計模式在 Spring 中的應用
    /tuozhan/2014/0601/7.html設計模式作為工作學習中的枕邊書,卻時常處於勤說不用的尷尬境地,也不是我們時常忘記,只是一直沒有記憶。今天,螃蟹就設計模式的內在價值做一番探討,並以spring為例進行講解,只有領略了其設計的思想理念,才能在工作學習中運用到「無形」。Spring作為業界的經典框架,無論是在架構設計方面,還是在代碼編寫方面,都堪稱行內典範。好了,話不多說,開始今天的內容。
  • 面向對象軟體設計模式(1)--單例模式(Singleton)
    在電影的拍攝過程中,可能會設計多個片場,導演需要對不同的演員進行分別指導,但所有演員導演都是同一個人,「把導演叫過來」 這個過程可以視為單例模式獲取實例的過程模式分析先來看最簡單的寫法public class Single { private static Single instance; public static Single getInstance()
  • Java設計模式:三大類工廠方法模式
    【IT168 技術】一、工廠模式主要是為創建對象提供過渡接口,以便將創建對象的具體過程屏蔽隔離起來,達到提高靈活性的目的。  工廠模式在《Java與模式》中分為三類:  1)簡單工廠模式(Simple Factory):不利於產生系列產品。
  • 【設計模式】各個擊破單例模式的8種寫法
    單例模式在一個系統開發過程中,我們在基於節省內存資源、保證數據內容的一致性的考慮上,往往需要對某些類要求只能創建一個實例,即「保證類只有一個實例」的設計模式就是單例模式。比如我們遇到過的各種Manager管理類,各種Factory工廠類;Spring 框架應用中的 ApplicationContext、資料庫中的連接池等也都是單例模式。本文旨在淺析一下單例模式的寫法。單例模式的8種寫法1.