解析Javascript設(shè)計(jì)模式Revealing?Module?揭示模式單例模式
1. Revealing Module 揭示模式
該模式能夠在私有范圍內(nèi)簡單定義所有的函數(shù)和變量,并返回一個匿名對象, 它擁有指向私有函數(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ù)和變量可被公開訪問,改善了可讀性。
- 如果一個私有函數(shù)引用一個公有函數(shù),在需要打補(bǔ)丁時,公有函數(shù)是不能被覆蓋的。 因?yàn)樗接泻瘮?shù)將繼續(xù)引用私有實(shí)現(xiàn),該模式并不適用于公有成員,只使用函數(shù)。
2. Singleton 單例模式
單例模式,能夠限制類的實(shí)例化次數(shù)只能為一次。單例模式,在該實(shí)例不存在的情況下, 可以通過一個方法創(chuàng)建一個類來實(shí)現(xiàn)創(chuàng)建類的新實(shí)例;如果實(shí)例已經(jīng)存在,它會簡單返回該對象的引用;
示例:
<script type="text/javascript"> var mySingleton = (function () { //實(shí)例保持了singleton 的一個引用 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í)需要一個對象來協(xié)調(diào)其他對象時,>Singleton模式很有用。
示例:
<script type="text/javascript"> var SingletonTester = (function() { //options: 包含singleton所需配置信息的對象 //var options = {name:"test",pointX:5}; function Singleton(options) { //如果未提供options,則設(shè)置為空對象 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對象的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 揭示模式單例模式的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Javascript實(shí)現(xiàn)的分頁函數(shù)
Javascript實(shí)現(xiàn)的分頁函數(shù)...2006-12-12微信小程序滾動Tab實(shí)現(xiàn)左右可滑動切換
這篇文章主要介紹了微信小程序滾動Tab實(shí)現(xiàn)左右可滑動切換的相關(guān)資料,這里提供實(shí)現(xiàn)實(shí)例幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-08-08微信小程序-getUserInfo回調(diào)的實(shí)例詳解
這篇文章主要介紹了微信小程序-getUserInfo回調(diào)的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10關(guān)于Javascript閉包與應(yīng)用的詳解
這篇文章主要介紹了關(guān)于Javascript閉包與應(yīng)用的詳解,文中有非常詳細(xì)的代碼示例.對正在學(xué)習(xí)js的伙伴們有很好的幫助,需要的朋友可以參考下2021-04-04autojs長寬不定的圖片在正方形圖片居中實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了autojs長寬不定的圖片在正方形圖片居中實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01實(shí)現(xiàn)基于飛書webhook監(jiān)聽github代碼提交
這篇文章主要為大家介紹了實(shí)現(xiàn)基于飛書webhook監(jiān)聽github代碼提交示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01