github所有關于設計模式的代碼:js學習設計模式記錄
1.單例模式
目的:讓項目中僅存在一個SingleObj的實例份汗,多次聲明實例獲取到的都是同一個實例,不會進行多次new喉悴。
實現(xiàn)思路:SingleObj.getInstance()代替new SingleObj()來獲取實例奏路,以控制SingleObj僅有一個實例。
SingleObj.getInstance()的返回值每次都是同一個實例滑臊,所以SingleObj.getInstance()中儲存著一個SingleObj的實例痰娱。所以利用閉包儲存一個SingleObj實例
//單例模式1
class SingleObj{
}
SingleObj.getInstance=(function(){
const instance=new SingleObj()
return function () {
return instance
}
})()
const ins1=SingleObj.getInstance()
const ins2=SingleObj.getInstance()
console.log(ins1===ins2)//true
上面的代碼實現(xiàn)了單例模式弃榨,但是使用了自執(zhí)行函數(shù)在SingleObj.getInstance被聲明階段就執(zhí)行new SingleObj()
。讓getInstance即使沒有被調(diào)用進行了SingleObj的實例化梨睁。造成了一開始不必要的資源浪費鲸睛,所以需要將new SingleObj的操作滯后
//單例模式2
class SingleObj{
}
SingleObj.getInstance=(function(){
let instance=null
return function () {
if(!instance)
{
instance=new SingleObj()
}
return instance
}
})()
const ins1=SingleObj.getInstance()
const ins2=SingleObj.getInstance()
console.log(ins1===ins2)//true