單例模式:是一種常見的設計模式,在它的核心結構中值有乙個被稱為單例的類,乙個類只有乙個例項,即乙個類只被建立了一次。
一:單例模式都是使用靜態方法建立的,所以單例物件在記憶體中靜態共享區中儲存
原因:
類中方法被呼叫的形式:建立類的物件呼叫方法,直接用類名呼叫;在類名直接呼叫的過程中,類中方法必須是靜態的,然而靜態方法不能訪問非靜態成員變數。所以該類中自定義變數必須是靜態的。
單例模式分類:懶漢模式和餓漢模式 ;
第1種:懶漢模式(執行緒不安全)
第2種:懶漢模式(執行緒安全)public
class singleton
public
static singleton getinstance()
return instance;
}}
第3種:餓漢模式public
class
singleton
/*** 但是由於synchronized鎖機制,效率低
*@return
*/public
static
synchronized singleton getinstance()
return instance;
}}
第4種:餓漢(變種)public
class
singleton
/*** 在類載入過程中就直接例項,載入時候慢,但使用時候比較快
*@return
*/public
static
synchronized singleton getinstance()
}
第5種:靜態內部類public
class
singleton
private
singleton(){}
/*** 在類載入過程中就直接例項,載入時候慢,但使用時候比較快
*@return
*/public
static
synchronized singleton getinstance()
}
第6種:列舉(基本上不常見)public
class
singleton
private
singleton(){}
/*** 這種方式同樣利用了classloder的機制來保證初始化instance時只有乙個執行緒,
* 它跟第三種和第四種方式不同的是(很細微的差別):
* 第三種和第四種方式是只要singleton類被裝載了,那麼instance就會被例項化(沒有達到lazy loading效果),
* 而這種方式是singleton類被裝載了,instance不一定被初始化。
* 因為singletonholder類沒有被主動使用,只有顯示通過呼叫getinstance方法時,
* 才會顯示裝載singletonholder類,從而例項化instance。想象一下,如果例項化instance很消耗資源,
* 我想讓他延遲載入,另外一方面,我不希望在singleton類載入時就例項化,
* 因為我不能確保singleton類還可能在其他的地方被主動使用從而被載入,
* 那麼這個時候例項化instance顯然是不合適的。這個時候,這種方式相比第三和第四種方法就顯得更合理
*@return
*/public
static
final singleton getinstance()
}
public
enum singleton
}
常用設計模式 單例模式
1.單例模式的特點 1.單例類在系統中僅有乙個例項 2.單例類必須自己建立自己的例項 3.單例類必須向系統中的其他物件提供這個例項 2.單例模式的兩種模式 public class test 2.1 餓漢模式 public class singleton 建立類的唯一例項 private stati...
常用設計模式 單例模式
一 單例模式定義 單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。在計算機系統中,執行緒池 快取 日誌物件 對話方塊 印表機 顯示卡的驅動程式物件常被設計成單例。這些應用都或多或少具有資源管理器的功能。每台計算機可以有若干個印表機,但只能有乙個printer spooler,...
常用設計模式 單例模式
應用執行過程當中,只有乙個物件的模式,叫做單例模式 1.構造器私有 2.提供可以獲得物件的靜態方法 3.將物件設定為靜態 懶漢模式 用的時候再建立 餓漢模式 載入的時候就建立 public class singleton 構造器私有,無法在外部例項化這個物件 外部一千一萬個物件也都只能是對perso...