設計模式 二 單例模式

2021-07-29 07:20:07 字數 1289 閱讀 5038

建立乙個物件並不難,但當我們不得不為每新新增一種抽象類或介面而到處修改客戶**時,就不得不思考直接使用new建立物件帶來的高耦合。建立型別的模式將使用物件和

例項化物件 進行了分離。建立型別模式包括:單例模式、工廠方法模式、原型模式。下面先看單例模式:

單例模式:保證乙個類在系統裡只有乙個例項化物件。

應用:快取池、資料庫連線池、執行緒池、一些應用服務例項。

1.最簡單的單例

package jyy.designpattern.singleton;

public class singleton

//other fields...

//為了給客戶物件提供該單例物件的訪問,設定乙個全域性訪問站點:

private static singleton instance=new singleton();

public static singleton getinstance()

//other methods

}

//單例模式提供了靜態公有方法,使用者使用單例模式的**很簡單:

//singleton singletion=singleton.getinstance();

此實現時執行緒安全的,當多個執行緒訪問getinstance()方法時,不能初始化多個物件,因為jvm在載入此類事,對static修飾的屬性只能由乙個執行緒執行,且僅一次。如果該例項需要比較複雜的初始化過程,

2.延遲例項化單例物件

static屬性修飾的東西在載入類時就會被初始化,但是我們希望在第一次用到該類的例項時才去例項化,那麼應該怎麼辦呢?——只需把單例的例項化過程移至getinstance()方法。為了保證執行緒安全,需要用synchronized關鍵字修飾,但是這樣在多執行緒高併發訪問的情況下,會使效能大不如前。(synchronized修飾的**塊一段時間內只能由乙個執行緒執行,這個執行緒佔據同步鎖,其他執行緒被阻塞,需要等待當前執行緒執行完成後再執行)。仔細分析會發現這樣是沒有必要的,因為我們只需要保證例項化這個物件的那段邏輯被乙個執行緒執行就可以了,而返回引用的那段**是沒必要同步的。因此可作如下實現:

package jyy.designpattern.singleton;

public class doublechecksingleton ;

public static doublechecksingleton getinstance()

}} return instance;

}}

設計模式(二) 單例模式

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

設計模式(二)單例模式

單例模式 保證只有乙個物件,每次獲取物件獲取到的都是同乙個物件。單例模式是我們程式中最常見的設計模式,很多任務具類都設計成單例模式,spring中的bean也有單例,單他不是真正的單例。單例模式總結下來有幾種寫法,他們共性就是私有的構造方法。package com.designpattern.sin...

設計模式《二》單例模式

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