工做已經一年之久,不少時間心思大多都花在需求的完成上,需求的完成度很高,可是設計呢?數據庫
有沒有考慮過你所實現的代碼是否有設計在其中呢?設計模式
若是沒有的話接下來和我一塊兒學習設計模式哈~(不必定學習了設計模式就能提升你的設計,可是總歸會有幫助)安全
設計模式(Design Pattern)是一套被反覆使用、多數人知曉的、通過分類編目的、代碼設計經驗的總結,使用設計模式是爲了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。多線程
按目的分類:工具
按範圍分類:(模式主要是用於處理類之間關係仍是處理對象之間的關係)學習
確保某一個類只有一個實例,並且自行實例化並向整個系統提供這個實例,這個類稱爲單例類,它提供全局訪問的方法。 單例模式是一種對象建立型模式。網站
從他的定義咱們能夠看到有三個特色:spa
建立對象再也不經過new 而經過 getInstance 讓該類自行建立。線程
給你們介紹幾種可用的單例模式的實現:設計
/**
* 餓漢式(靜態常量)
*/
class Singleton {
private static final Singleton Instance = new Singleton();
static Singleton getInstance() {
return Instance;
}
private Singleton() {
}
}
複製代碼
優勢:簡單,使用時沒有延遲;在類裝載時就完成實例化,天生的線程安全
缺點:沒有懶加載,啓動較慢;若是從始至終都沒使用過這個實例,則會形成內存的浪費。
/**
* 餓漢式(靜態代碼塊)
*/
class Singleton {
private static Singleton Instance;
static {
Instance = new Singleton();
}
private Singleton() {
}
public static Singleton getInstance() {
return Instance;
}
}
複製代碼
這種是將類實例化的過程放在了靜態代碼塊中,在類裝載的時執行靜態代碼塊中的代碼,初始化類的實例。
優缺點同上。
/**
* 雙重檢查(DCL)
*/
public class Singleton {
private static volatile Singleton Instance;
private King() {
}
public static Singleton getKingInstance() {
if (Instance == null) {
synchronized (Singleton.class) {
if (Instance == null){
Instance = new Singleton();
}
}
}
return Instance;
}
}
複製代碼
優勢:線程安全;延遲加載;效率較高。
缺點:JDK < 1.5 的時候不可用
如今你們基本都是jdk1.8,因此也不存在這個問題。那爲何不可用呢?你們能夠學習一下哈
咱們學習了怎麼實現,那何時咱們須要採用單例模式呢?
單例模式只容許建立一個對象,所以節省內存,加快對象訪問速度,所以對象須要被公用的場合適合使用,如多個模塊使用同一個數據源鏈接對象等等。好比:
給你們介紹下具體的使用場景:
這是幾個比較經常使用的,你們能夠參考這些想一下在本身的項目中是否採用了單例模式呢?又或者哪裏也可使用單例模式呢?
其實單例模式的實現還有其餘的實現方式,好比線程安全等等的,可是根據各方面,效率等因素,不推薦使用。
因此我在這裏就只總結幾個推薦你們使用的單例模式的實現。但願對你們有用。