列舉實現(推薦)
「確保乙個類只有乙個例項,並提供乙個全域性訪問點來訪問這個唯一的例項。」
單例模式有3個要點:
根據這三個要點可知,類的建構函式私有化,並且在單例類中建立唯一的例項,最後提供靜態方法供外部共享訪問唯一的例項。
/**
* 餓漢式
*/public
class
eagersingleton
public
static eagersingleton getinstance()
}
優點:
缺點:
/**
* 懶漢式(雙重檢查)
*/public
class
lazysingleton
public
static lazysingleton getinstance()
}}return instance;
}}
優點:
缺點:
public
class
staticinnersingleton
// 單例持有者
private
static
class
instanceholder
public
static staticinnersingleton getinstance()
}
以上面的懶漢式為例
public
static
void
main
(string[
] args)
catch
(exception e)
}
通過反射的方式獲取的物件s1:lazysingleton@5e9f23b4
通過反射的方式獲取的物件s2:lazysingleton@4783da3f
新增成員變數flag判斷
public
class
lazysingleton
else}}
public
static lazysingleton getinstance()
}}return instance;
}}
在實現序列化介面serializable後,就會出現反序列化破壞單例的情況,直接在單例類中新增readresolve()方法。
/**
* 反序列化時該方法會直接使用已有的instance例項覆蓋反序列化出來的例項
* 從而防止反序列化生成新的物件
*/private object readresolve()
throws objectstreamexception
public
class
enumsingleton
private enumsingleton getinstance()
}public
static enumsingleton getinstance()
}
優點: 單例模式的四種執行緒安全的實現
1.懶漢經典模式,用互斥鎖實現 include include include class csingletonlock void lock void unlock class csingleton public static pthread mutex t m mutex static csing...
單例模式 四種
餓漢式 單例模式 餓漢式類載入到記憶體後,例項化乙個單例,jvm保證執行緒安全 都不能建立新的,所以安全,多執行緒都是安全的 簡單易用 缺點 不管是否用到,類載入時候就會例項化,浪費 一般專案開發中載入是用的class.forname 將class載入到記憶體,但不例項化,此時,如果使用餓漢,就會消...
python四種實現單例模式
coding utf 8 author xianyt date 2018 func 在預設的情況下建立多個物件的id不相同,如果想要設定為單例模式,可以通過 new 方法中的 instance 在 new 方法中把類例項繫結到類變數 instance上,如果cls.instance為none表示該類...