JavaScript設計模式之單件模式介紹
單件模式說明
1. 說明:單件模式,就是靜態(tài)化的訪問中已經(jīng)實例化的對象,這個對象只能通過一個唯一的入口訪問,已經(jīng)實例或待實例化的對象;面向?qū)ο笳Z言如Java, .Net C#這樣的服務端動態(tài)語言里,能保證類的操作有順的進行,避免并行操作使數(shù)據(jù)發(fā)生混亂的情況;
2. 單件模式的好處:
1>. 減少 new 的操作,以免加快內(nèi)存頻繁操作,占用內(nèi)存;
2>. 盡量減少大系統(tǒng)的對象的開銷;
3>. 就是上面說的,可以保障某些類型的操作有順序準確的操作,以免并行處理引起的數(shù)據(jù)異?,F(xiàn)象;
當然上面說的好處,都是說服務端語言里的。在javascript這種弱類型的語言,不要糾結(jié)那么多,因為腳本都在自己的客戶端這邊操作的,沒有什么操作沖突的問題;相當于整個服務器就你一個人在用,不用擔心,你的數(shù)據(jù)會被其他什么人操作的問題;
實例源碼
var Singleton = {
instance: null,
MailSender: function() {
var self = this;
self.to = '';
self.title = '';
self.content = '';
self.send = function() {
//send body
}
},
getInstance : function() {
if (this.instance == null) {
this.instance = new Singleton.MailSender();
}
return this.instance;
}
}
使用方法:
var mail = Singleton.getInstance();
mail.to = 'toname#mail.com';
mail.title = '單件模式發(fā)送';
mail.content = '發(fā)送內(nèi)容';
mail.send();
當像有些全局框架,比如像 DWZ 這樣的富UI框架,創(chuàng)建一個 全局 的Singleton 后,Singleton.instance 都有值了,就不必要再創(chuàng)建;
當然如果是寫成這樣的,會比較明了,跟服務端語言一置:
Singleton.getInstance().to = 'toname#mail.com';
Singleton.getInstance().title = '單件模式發(fā)送';
Singleton.getInstance().content = '發(fā)送內(nèi)容';
Singleton.getInstance().send();
其他實說明
單件模式在什么的地方,比較有用呢?比如有一個操作服務器上一個統(tǒng)一的配置文件時,比如像大規(guī)模并發(fā)操作還需要注意先來后到的情況時,比如交易所的操作過程記錄等,都可以用 單件模式 來操作;
另外:單件模式的方式:
1. 上頭那種叫懶惰方式
2. 餓棍方式:
var Singleton = {
instance : new Singleton.MailSender(),
MailSender : function() {
var self = this;
self.to = '';
self.title = '';
self.content = '';
self.send = function() {
//send body
}
},
getInstance : function() {
return this.instance;
}
}
使用方法一樣;
使用閉包方式創(chuàng)建單件模式,隱藏 instance 對象
1. 代碼:
var Singleton = (function() {
var instance = null;
function MailSender() {
this.to = '';
this.title = '';
this.content = '';
}
MailSender.prototype.send = function() {
//send body
}
return {
getInstance : function() {
if (instance == null) {
instance = new MailSender();
}
return instance;
}
}
})();
2. 使用方法:
//一樣用法
var mail = Singleton.getInstance();
mail.to = 'toname#mail.com';
mail.title = '閉包式 單件模式發(fā)送';
mail.content = '發(fā)送內(nèi)容';
mail.send();
相關文章
基于BootStrap柵格欄系統(tǒng)完成網(wǎng)站底部版權(quán)信息區(qū)
網(wǎng)站底部版權(quán)信息區(qū)可以用bootstrap的“柵格系統(tǒng)”完成,下面給大家分享一個未經(jīng)處理的底部版權(quán)信息區(qū)的樣式,大家可以做個參考2016-12-12在TypeScript項目中搭配Axios封裝后端接口調(diào)用
這篇文章主要介紹了在TypeScript項目中搭配Axios封裝后端接口調(diào)用,本文記錄一下在?TypeScript?項目里封裝?axios?的過程,之前在開發(fā)?StarBlog-Admin?的時候已經(jīng)做了一次封裝,不過那時是JavaScript跟TypeScript還是有些區(qū)別的,需要的朋友可以參考下2024-01-01