單例模式實(shí)例對(duì)象優(yōu)點(diǎn):可以保證實(shí)例對(duì)象的唯一性喂江,及數(shù)據(jù)的正確性
示例代碼:
model層(數(shù)據(jù)層)
//VipVo.ts:
class VipVo{
/** VIP等級(jí) */
public vip:number;
}
//VipMode.ts:
class VipModel{
private static _instance:VipModel;
private _vipVo:VipVo;
constructor(){
super();
}
public static getInstance():VipModel{
if(this._instance == null){
this._instance = new VipModel();
}
return this._instance;
}
public get vipVo():VipVo{
return this._vipVo;
}
public setVipVo(vo:VipVo):void{
this._vipVo = vo;
}
}
controller層(控制層)
//ImitVipMgr.ts
class ImitVipMgr {
//模擬的vip等級(jí)
private static vipLevel:number=2;
constructor() {
super();
}
private static _instance: ImitVipMgr;
public static getInstance(): ImitVipMgr {
if (this._instance == null) {
this._instance = new ImitVipMgr();
}
return this._instance;
}
public static setVip():void{
var vipVo: VipVo = new VipVo();
vipVo.vip = this.vipLevel++;
//實(shí)例VipModel對(duì)象琅翻,存值
VipModel.getInstance().setVipVo(vipVo);
}
}
view層(視圖層)
//第一步:實(shí)例ImitVipMgr對(duì)象渐扮,存值
var imitVipMgr:ImitVipMgr=ImitVipMgr.getInstance();
imitVipMgr.setVip();
//第二步:實(shí)例VipModel對(duì)象,取值
var vipMode:VipModel = VipModel.getInstance();
console.log(vipMode.vipVo.vip);
//輸出2
注意:
單例模式實(shí)例對(duì)象代碼
public static getInstance():VipModel{
if(this._instance == null){
this._instance = new VipModel();
}
return this._instance;
}
獲取對(duì)象代碼:
var vipMode:VipModel = VipModel.getInstance();
如果獲取對(duì)象的時(shí)候计贰,使用了new钦睡,比如:
var vipMode:VipModel =new VipModel();
console.log(vipMode.vipVo.vip);
//輸出undefined
因?yàn)閚ew一個(gè)實(shí)例,相當(dāng)于創(chuàng)建一塊內(nèi)存躁倒,與之前的對(duì)象不是同一個(gè)對(duì)象荞怒,所以屬性不存在
故洒琢,使用單例模式是保證對(duì)象唯一性和數(shù)據(jù)正確性的方法