解析Javascript設(shè)計(jì)模式Revealing?Module?揭示模式單例模式
1. Revealing Module 揭示模式
該模式能夠在私有范圍內(nèi)簡(jiǎn)單定義所有的函數(shù)和變量,并返回一個(gè)匿名對(duì)象, 它擁有指向私有函數(shù)的指針,該函數(shù)是他希望展示為公有的方法。
示例:
<script>
var myRevealingModule = function () {
var privateVar = "Ren Cherry",
publicVar = "Hey there";
function privateFunction() {
console.log("Name:"+privateVar);
}
function publicSetName(strName) {
privateName = strName;
}
function publicGetName() {
privateFunction();
}
//將暴露的公有指針指向到私有函數(shù)和屬性上
return {
setName: publicSetName,
greeting: publicvar,
getName: publicGetName
};
}();
myRevealingModule.setName("Paul Kinlan");
</script>
優(yōu)點(diǎn):
- 該模式很容易之處哪些函數(shù)和變量可被公開(kāi)訪問(wèn),改善了可讀性。
- 如果一個(gè)私有函數(shù)引用一個(gè)公有函數(shù),在需要打補(bǔ)丁時(shí),公有函數(shù)是不能被覆蓋的。 因?yàn)樗接泻瘮?shù)將繼續(xù)引用私有實(shí)現(xiàn),該模式并不適用于公有成員,只使用函數(shù)。
2. Singleton 單例模式
單例模式,能夠限制類的實(shí)例化次數(shù)只能為一次。單例模式,在該實(shí)例不存在的情況下, 可以通過(guò)一個(gè)方法創(chuàng)建一個(gè)類來(lái)實(shí)現(xiàn)創(chuàng)建類的新實(shí)例;如果實(shí)例已經(jīng)存在,它會(huì)簡(jiǎn)單返回該對(duì)象的引用;
示例:
<script type="text/javascript">
var mySingleton = (function () {
//實(shí)例保持了singleton 的一個(gè)引用
var instance;
function init() {
//singleton
//私有方法和變量
function privateMethod() {
console.log("I am private");
}
var privateVariable = "I am also private";
var privateRandomNumber = Math.random();
return {
//公有方法和變量
publicMethod: function () {
console.log("The public can see me!");
},
publicProperty: "I am also public",
getRandomNumber: function() {
return privateRandomNumber;
}
};
};
return {
//獲取singleton 的實(shí)例,如果存在就返回,不存在就創(chuàng)建新實(shí)例
getInstance: function() {
if(!instance) {
instance = init();
}
return instance;
}
};
})();
var singleA = mySingleton.getInstance();
var singleB = mySingleton.getInstance();
console.log(singleA.getRandomNumber()===singleB.getRandomNumber());//true
</script>
在實(shí)踐中,當(dāng)在系統(tǒng)中確實(shí)需要一個(gè)對(duì)象來(lái)協(xié)調(diào)其他對(duì)象時(shí),>Singleton模式很有用。
示例:
<script type="text/javascript">
var SingletonTester = (function() {
//options: 包含singleton所需配置信息的對(duì)象
//var options = {name:"test",pointX:5};
function Singleton(options) {
//如果未提供options,則設(shè)置為空對(duì)象
options = options || {};
//為singleton設(shè)置一些屬性
this.name = "SingletonTester";
this.pointX = options.pointX || 6;
this.pointY = options.pointY || 10;
}
//實(shí)例持有者
var instance;
//靜態(tài)變量和方法的模擬
var _static = {
name: "SingletonTester",
//獲取實(shí)例的方法,返回singleton對(duì)象的singleton實(shí)例
getInstance: function(options) {
if(instance === undefined) {
instance = new Singleton(options);
}
return instance;
};
return _static;
}
})();
var singletonTest = SingletonTester.getInstance({
pointX: 5
});
console.log(singletonTest.pointX);//5
</script>以上就是解析Javascript設(shè)計(jì)模式Revealing Module 揭示模式單例模式的詳細(xì)內(nèi)容,更多關(guān)于JS 揭示模式單例模式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
微信小程序滾動(dòng)Tab實(shí)現(xiàn)左右可滑動(dòng)切換
這篇文章主要介紹了微信小程序滾動(dòng)Tab實(shí)現(xiàn)左右可滑動(dòng)切換的相關(guān)資料,這里提供實(shí)現(xiàn)實(shí)例幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-08-08
JavaScript設(shè)計(jì)模式之原型模式和適配器模式示例詳解
這篇文章主要為大家介紹了JavaScript 原型模式和適配器模式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
JS高級(jí)程序設(shè)計(jì)之class繼承重點(diǎn)詳解
這篇文章主要為大家介紹了JS高級(jí)程序設(shè)計(jì)之class繼承重點(diǎn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
微信小程序 聊天室簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了微信小程序 聊天室簡(jiǎn)單實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-04-04
ResizeObserver 監(jiān)視 DOM大小變化示例詳解
這篇文章主要為大家介紹了ResizeObserver 監(jiān)視 DOM大小變化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
微信小程序 input輸入及動(dòng)態(tài)設(shè)置按鈕的實(shí)現(xiàn)
這篇文章主要介紹了微信小程序 input輸入及動(dòng)態(tài)設(shè)置按鈕的實(shí)現(xiàn)的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-10-10

