所謂「餓漢式」,是指單例項在類載入時刻就已構造完成。
public
class
singleton1
//類載入的初始化階段,會給靜態變數instance賦值,此時單例項得到構建
private
static singleton1 instance =
newsingleton1()
;public
static singleton1 getinstance()
}
由於instance變數是類變數,只保留乙份,多個執行緒同時呼叫getinstance方法,也只會返回同乙個instance物件,因此可以應用於多執行緒環境。
缺點:單例的建立時機過早。
所謂"懶漢式",是指單例項並不是一開始就構建好的,而是需要使用的時候才建立,也就是延遲建立。
懶漢式解決了餓漢式的缺點。
public
class
singleton2
private
static singleton2 instance = null;
public
static singleton2 getinstance()
}}return instance;
}}
雙重檢查+鎖機制,保證了上述**可以在多執行緒環境下可靠執行。
第二種實現懶漢式的方式,利用類載入階段的初始化行為只進行一次,且內部類不隨著外部類的載入而載入,而是在第一次使用的時候才會載入。因此,也可以應用於多執行緒環境。
public
class
singleton3
public
static singleton3 getinstance()
//內部類不會隨著外部類的載入而載入,而是在第一次使用到內部類的時候才會載入
private
static
class
innerclass
}
單例模式的三種實現方式
1.餓漢模式 package com.fullstacker.study.designpattern.singleton 餓漢模式 餓漢模式是執行緒安全的單例模式 author xingguishuai create 2017 03 27 15 53 public class hungrysingl...
實現單例的三種方式
1 必須在該類中 自己先建立出乙個物件並私有化物件.2 私有化自身的構造器 防止外界通過構造器建立新的物件 3 想外暴露乙個公共的靜態方法用於獲取自身的物件 目的 保證某乙個在整個應用中某乙個類有且只有乙個例項 乙個類在堆記憶體只存在乙個物件 即所有指向該型別例項的引用都指向同一塊記憶體空間。cla...
單例的三種實現方式
方式一 類方法實現單例模式 class mysql instance none def init self,host,port self.host host self.port port q classmethod defsingleton cls ifnot cls.instance cls.in...