1. 程式人生 > >Java Singleton 單例模式思考

Java Singleton 單例模式思考

在設計模式中,單例模式(Singleton)是最長見得一種設計模式之一。什麼是單例模式呢?就是在整個系統中,只有一個唯一存在的例項。這樣的情況可以幹什麼用呢?比如可以統計網站的訪問量,一些連線池(資料庫連線池等)。

一個最簡單的單例模式 – 餓漢模式

那麼怎麼能保證只有一個物件的存在呢?首先得有一個static的例項,這個方法保證了一個class只有一個例項。還得防止外界使用構造器來new一個例項。

1 2 3 4 5 //一個沒有封裝的單例模式 public class Singleton {
public static final Singleton singleton = new Singleton(); private Singleton(){} }

外界就可以使用Singleton.singleton這樣的方法來呼叫了。但是這樣存在的問題就是分裝不夠好,新增一個方法,返回singleton的引用。如下

1 2 3 4 5 6 //最簡單的封裝單例改進版。餓漢模式 public class Singleton {
public static final Singleton singleton = new Singleton(); private Singleton(){} public static Singleton getInstance(){ return singleton; } }

當代碼寫到這,我們終於可以鬆一口氣了,原來單例模式也很簡單呀,就這麼幾行的程式碼。對,其實這個是最簡單的一種方式,能夠應付大部分的場景的。

不過,其他class在引用Singleton而不使用的時候,虛擬機器會自動載入這個類,並且例項化這個物件(這點知道Java虛擬機器的類載入就會了解那麼一些)。於是我們就有了下面的寫法。

延遲例項化(懶漢模式) – 在呼叫時進行例項化

經常能看見其他的單例模式會教下面的程式碼,這樣的人估計是從《設計模式 – 可複用面向物件軟體的基礎》那本書看來的。這本書使用的是C++語言寫的,然後就將其轉到了Java平臺來。

首先他們會說我們的程式碼應該先這樣,在呼叫的時候,發現為null,再進行例項化該類。

01 02 03 04 05 06 07 08 09 10 public class Singleton { public static final Singleton singleton = null; private Singleton(){} public static Singleton getInstance(){

相關推薦

Java Singleton 模式思考

在設計模式中,單例模式(Singleton)是最長見得一種設計模式之一。什麼是單例模式呢?就是在整個系統中,只有一個唯一存在的例項。這樣的情況可以幹什麼用呢?比如可以統計網站的訪問量,一些連線池(資料庫連線池等)。 一個最簡單的單例模式 – 餓漢模式 那麼怎麼能保證只有一個物件的存在呢

Java-singleton模式

單執行緒懶漢式 註解:Singleton的靜態屬性instance中,只有instance為null的時候才建立一個例項,建構函式私有,確保每次都只建立一個,避免重複建立。 缺點:只在單執行緒的情況下正常執行,在多執行緒的情況下,就會出問題。例如:當兩個執行緒同時執行到判斷insta

Java模式(singleton)

ron 好聽 on() == sin 如果 odin 如同 可能 為什麽需要單例?只因為國家的獨生子女政策(當然現在可以生2個) 單例是一個很孤獨的物種,因為它的類裏面做多只有也僅只有它一個。 常見的是懶漢及餓漢模式, 1.懶漢,為什麽這麽叫,看看英文,原為lazy loa

java 設計模式 --singleton 模式

Singleton 單例模式:         有些物件只需要一個,比如:執行緒池、快取、對話方塊、處理偏好設定和登錄檔的物件、日誌物件,充當印表機、顯示卡等裝置的驅動程式的物件。         

Java筆試題——Singleton模式

Singleton模式主要作用是保證在Java應用程式中,一個類Class只有一個例項存在。 第一種形式: 定義一個類,它的建構函式為private的,它有一個static的private的該類變

JAVA模式(用java寫一個singleton的例子)。

程式碼如下: package test; public class SingleObject {// 建立 SingleObject 的一個物件private static SingleObject

溫故而知新(java實現)模式的七種寫法

反序 防止 代碼 工作 html 我想 變種 evel 才會 第一種(懶漢,線程不安全): Java代碼 public class Singleton { private static Singleton instance; private S

Java模式的七種寫法

work 為我 get 加載 java dev 創建 一個 對象 轉載出處:http://cantellow.javaeye.com/blog/838473 第一種(懶漢,線程不安全): 1 public class Singleton { 2 private

ElasticSearch java api -模式

elastic earch request index mmu parse .get 單例 list數據 //單例模式 private static Settings getSettingInstance(){ if(settings==null){ synchron

Java模式實現

java 單例模式 只能生成一個實例的類是實現了Singleton(單例)模式的類。以下為C#實現單例模式的方式方式一只使用於單線程環境// 把構造函數設為私有函數以禁止他人創建實例 // 定義一個靜態的實例,在需要的時候創建該實例 // 在Singleton的靜態屬性Instance中,只有

Java基礎 模式之懶漢式

懶漢 私有 珍惜 src pac auth 如果 x64 version 禮悟: 好好學習多思考,尊師重道存感恩。葉見尋根三返一,活水清源藏於零。 虛懷若谷良心主,皓月當空自在王。願給最苦行無悔,誠勸且行且珍惜。 os :

【轉】Java中用模式有什麽好處

別了 通過 詳細 線程同步 請求 占用 解決辦法 每次 耦合 Java Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。 使用Singleton的好處還在於可以節省內存,因為它限制了實例的個數,有利於Java垃圾回收(garb

Java模式——有C++基礎的Java入門(五)

目錄 什麼是單例模式(Singleton)? 一、 懶漢模式 1、 例項 2、 原理 二、 餓漢模式 1、 例項 什麼是單例模式(Singleton)? 設計模式:Java中,一共有23種設計模式,說白了就是比較牛的程式碼設計思想。單例模式裡面非常簡單的一種。

Java基礎---模式 觀察者模式 反射 工廠模式

package cn.itcast.single; /*  單例設計模式:     懶漢單例設計模式(執行緒安全問題 的解決方案):   步驟:   1. 私有化建構函式。   2. 宣告

Java學習——模式

單例模式 特點:一個類只允許產生一個例項化物件 一個普通的類我們可以new出多個例項化物件,如何才能限制物件的個數呢? 產生物件的本質是我們呼叫了類的構造方法,如果我們無法呼叫構造方法不就不會產生例項化物件了嗎?最容易想到的就是將類的構造方法私有化。一旦構造方法被私有化了,表示外部無

java模式:餓漢式、懶漢式、雙重校驗鎖、列舉、靜態內部類

一、餓漢式: /** * 餓漢式: * 不存在多執行緒同步問題,當類被載入時,初始化並分配記憶體空間; * 當類被解除安裝時,才釋放所佔記憶體,因此在某些特定條件下會耗費記憶體。 * * @author: Rodge * @time: 2018年10月4日 下午4:35:12 * @

java基礎-模式

java中的定義: 單例模式( Singleton模式),一個類有且僅有一個例項,並且自行例項化向整個系統提供(公開)。 單例模式的三個要點 具體實現的角度來說: 構造方法私有化 靜態屬性指向例項 public static的getInstance方法,返

【第11天】Java模式、介面以及Object類常用的方法

1 單例模式 1.1 醉漢式 1.2 懶漢式 2 介面(interface) 3 Object類常用的方法 3.1 clone() 3.2 finalize()

java】——模式學習理解

    單例模式,總而言之還是多種多樣的,理解不同的單例模式,對於開發過程中更是極為方便,以下彙總幾種單例的使用,積累備用。     一、只適合單執行緒環境 package test; /** * @author xiao

java模式

單例模式屬於設計模式中的一種,使用單例模式的類允許只存在一個物件例項。在java開發中,有好多種不同單例模式的寫法,而且運用的場景也各不相同,因此在java面試中屬於高頻考點,面試官會讓面試者手寫單例模式程式碼,所以提醒大家特別注意下。 這裡我就記錄下常見的幾種單例模式寫法: