設計模式(二)單例模式

2021-08-10 21:53:02 字數 1500 閱讀 5831

單例模式:保證只有乙個物件,每次獲取物件獲取到的都是同乙個物件。

單例模式是我們程式中最常見的設計模式,很多任務具類都設計成單例模式,spring中的bean也有單例,單他不是真正的單例。

單例模式總結下來有幾種寫法,他們共性就是私有的構造方法。

package com.designpattern.singleton;

/** * 執行緒安全的 低效率的 懶載入

* 直接在方法上加互斥鎖 synchronized 。簡單粗暴

* 但是效率低。不加鎖執行緒不安全,是錯誤**

*/public

class

safelazy ;

public

static

synchronized safelazy getinstance()

return safelazy;

}

package com.designpattern.singleton;

/** * 餓漢模式 由於太餓了就在初始化的時候建立物件。

* 餓漢模式是執行緒安全的,但是不適合單例的大物件。

* 或者是不常用的物件。

*/public

class

singleton ;

public

static singleton getinstance()

}

package com.designpattern.singleton;

/** * 雙重校驗鎖

* 保證了執行緒的安全,

* 效率比方法上互斥鎖要高效,適合併發。

* 當判斷到沒有例項化之後,

* 再加鎖保證執行緒安全判斷是否仍然沒有例項化

*/public

class

doublesafelazy

public

static doublesafelazy getinstance()}}

return safelazy;

}}

package com.designpattern.singleton;

/** * 內部類的方式

* 借用了外部類裝載的時候,內部類不裝載的特性。

*/public

class

innersingleton

private

innersingleton (){}

private

final

static

class

innersingletonbuilder

}

另外有必要說一下spring的單例,spring的單例是在spring容器初始化的時候,會把bean物件建立好,放入上下文中,已乙個map的形式儲存, key 是bean的id,value是bean的例項物件。當每次取bean的例項的時候從map中獲取,這樣的單例是指的spring容器中的單例,不是真正的單例。

設計模式 二 單例模式

建立乙個物件並不難,但當我們不得不為每新新增一種抽象類或介面而到處修改客戶 時,就不得不思考直接使用new建立物件帶來的高耦合。建立型別的模式將使用物件和 例項化物件 進行了分離。建立型別模式包括 單例模式 工廠方法模式 原型模式。下面先看單例模式 單例模式 保證乙個類在系統裡只有乙個例項化物件。應...

設計模式(二) 單例模式

單例模式 用來建立只能有乙個例項的物件。確保乙個類只有乙個例項,並提供乙個全域性訪問點。有的時候我們不希望乙個類被建立出多個物件,因為多個例項會帶來許多不好的影響。經典單例模式 public class singleinstance public static singleinstance geti...

設計模式《二》單例模式

確保乙個類有且僅有乙個例項,並且提供乙個全域性的訪問點。通俗地說就是,物件只能生成乙個,並且生成該物件的方法只有乙個。單例模式的使用是為了只產生乙個例項,從產生乙個例項的原因及作用來看 1.對頻繁生成銷毀的類避免了資源的浪費。2.達到了不同執行緒之間的資料共享。單例模式的經典實用,比如windows...