某個類只能生成一個實例,該類提供了一個全局訪問點供外部獲取該實例。vue
建立對象和管理單例的職責被分佈在兩個不一樣的方法中,這兩個方法組合起來才具備單例模式的威力。vuex
使用閉包實現:redux
const Singleton = function(name) {
this.name = name;
}
Single.prototype.getName = function() {
alert(this.name);
}
Singleton.getInatance = (function(name){
let instance;
return function(name) {
if(!instance) {
instance = new Singleton(name);
}
return instance;
}
})()
var a = Singleton.getInstance('ConardLi');
var b = Singleton.getInatance('ConardLi');
console.log(a === b);
複製代碼
劃分命名空間
,減小全局變量加強模塊性
,把本身的代碼
組織在一個全局變量
名下,放在單一位置,便於維護實例化一次
。簡化了代碼的調試和維護因爲單例模式提供的是一種單點訪問,因此它有可能致使模塊間的強耦合 從而不利於單元測試
。markdown
沒法單獨測試一個調用了來自單例的方法的類
,而只能把它與那個單例
做爲一個單元一塊兒測試。閉包