JAVA設計模式之單例模式

2021-08-31 15:36:53 字數 1320 閱讀 6897

singleton是一種建立型模式,指某個類採用singleton模式,則在這個類被建立後,只可能產生乙個例項供外部訪問,並且提供乙個全域性的訪問點。

全域性物件和singleton模式有本質的區別,因為大量使用全域性物件會使得程式質量降低,而且有些程式語言根本不支援全域性變數。最重要的是傳統的全域性物件並不能阻止乙個類被例項化多次。

ø單例類只能有乙個例項 ø

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

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

ø每台計算機可以由若干個印表機,但只能有乙個printer spooler,避免有兩個作業同時輸出到印表機。 ø

乙個具有自動編號主鍵的表可以有多個使用者同時使用,但資料庫中只能有乙個地方分配下乙個主鍵。否則會出現主鍵重複。

ø不要使用單例模式訪問全域性變數。這違背了單列模式的用意,最好放到對應類的靜態成員中。 ø

不要將資料庫連線做成單例,因為乙個系統可能與資料庫有多個連線,並且在有連線池的情況下,應當盡可能及時釋放連線。singleton模式由於使用靜態成員儲存類例項,所以可能會造成資源無法及時釋放。

(1)

/* 執行緒安全 但效率比較低一開始就要載入類new乙個 物件

這是餓漢方式的單例模式*/

public

class singleton1

private static final singleton1 instance=new singleton1();

public static singleton1 getinstancei() }

(2)

// 飽漢方式的單例模式 但是有多個執行緒訪問時就不是安全的 返回的不是同乙個物件

public

class singleton

private static singleton instance;

public static singleton getinstance() }

(3)//雖然是安全的 但是效率非常低在乙個時候只有乙個執行緒能訪問同時返回乙個物件

public

class singleton2

private static singleton2 instance;

public static synchronized singleton2 getinstance()      }

(4)

/* 執行緒安全並且效率高能有多個執行緒訪問*/

public

class singleton3

public static singleton3 getistance() }

}return instance; }

}

java設計模式之單例模式

單位面試題目中有一道關於單例模式的題目.大多數參加筆試的同事都會寫出getinstance這個函式,但是當我問起什麼情況下需要使用單例 單例具體有什麼好處的時候 static函式也可以構建唯一例項,為什麼還需要單例.從使用單例的經驗來看,如下場景下,個人感覺應該使用單例 1.如果需要構建乙個工具類,...

java設計模式 之 單例模式

單例模式 有些類在程式執行過程中只需要儲存乙個例項,比如檔案管理類,音訊管理類,那麼我們如何實現乙個單例類呢?有以下幾點 1 定義乙個靜態變數 2 建構函式私有化 3 提供乙個public 靜態方法,獲取這個例項 4 一定要做執行緒同步 public static class singleton p...

Java設計模式之單例模式

說到單例模式 大家一定非常熟悉 這是最常見也是設計模式中相對簡單 好理解的設計模式 今天就跟大家掰一掰單例模式 單例模式確保某個類只有乙個例項 應用場景 執行緒池 快取 等物件常常被設計成單例 然而單例分兩種 1 惡漢式 2 懶漢式 我們先來看下 惡漢式 public class singleton...