摘要:但是,這并不是采用單例的唯一原因。使用命名空間單例模式也被稱為模塊設(shè)計模式。函數(shù)內(nèi)部聲明了一些局部函數(shù)和或變量。緊隨函數(shù)聲明放置即可立即執(zhí)行外部函數(shù),并將所得的對象文字費賠給變量。
JavaScript設(shè)計模式-第一部分:單例模式、組合模式和外觀模式
設(shè)計模式是一些可靠的編程方式,有助于保證代碼更加易于維護、擴展及分離,所有設(shè)計模式在創(chuàng)建大型JavaScript應(yīng)用程序時均不可或缺
單例模式單例模式是指在您要確保始終只創(chuàng)建一個對象實例時使用的設(shè)計模式。在面向?qū)ο蟮慕?jīng)典編程語言中,創(chuàng)建單例模式背后的概念多少有點讓人難以理解,因為其中包含一個同時具有靜態(tài)及非靜態(tài)屬性和方法的類。但本文主要討論JavaScript,因此,由于JavaScript是一種不包含真正類的動態(tài)語言,因此JavaScript版本的單例模式極其簡單。
為什么需要采用單例模式?
在我開始介紹實施細節(jié)之前,我需要探討一下為什么單例模式對于應(yīng)用程序非常有用。它能夠確保您只有一個對象實例能夠?qū)嶋H派上用場。在服務(wù)器端語言中,您可能會使用單例處理數(shù)據(jù)庫連接,這是由于為一個請求創(chuàng)建多個數(shù)據(jù)庫連接純粹是一種資源浪費。同樣,在前端JavaScript中,您可能會希望將負責(zé)處理所有AJAX請求的某個對象設(shè)置為單例。規(guī)則非常簡單:如果每m次創(chuàng)建新實例時,實例的功能均完全相同,那么將其設(shè)置為單例。
但是,這并不是采用單例的唯一原因。至少在JavaScript中,單例可讓您保證命名空間對象和函數(shù)井然有序,防止它們與全局命名空間混淆,您可能明白,這是一種可怕的想法,特別是在使用第三方代碼的情況下。使用命名空間單例模式也被稱為模塊設(shè)計模式。
展示單例模式
要創(chuàng)建單例,您只需創(chuàng)建一個對象文字。
var Singleton = { prop: 1, another_prop: "value", method: function() {...}, another_method: function() {...} };
您還可以創(chuàng)建具有私有屬性和方法的單例,但由于設(shè)計使用封閉函數(shù)和自調(diào)用匿名函數(shù),因而稍微有些難以理解。函數(shù)內(nèi)部聲明了一些局部函數(shù)和/或變量。然后,創(chuàng)建并返回一個對象文字,其中包含一些引用您在更大的函數(shù)范圍內(nèi)聲明的變量和函數(shù)方法。緊隨函數(shù)聲明放置()即可立即執(zhí)行外部函數(shù),并將所得的對象文字費賠給變量。如果這些介紹讓你感到困惑,那么請看下面的代碼,隨后我將會作出進一步的說明。
var Singleton = (function() { var private_property = 0, private_method = function () { console.log("This is private"); } return { prop: 1, another_prop: "value", method: function() {...}, another_method: function() {...} } }());
關(guān)鍵在于,當(dāng)通過某個變量所在函數(shù)前方的var聲明該變量時,該變量只能在函數(shù)內(nèi)部通過該函數(shù)內(nèi)聲明的各函數(shù)(例如對象文字內(nèi)函數(shù))進行訪問。return語句可幫助我們回到在外部函數(shù)自行執(zhí)行后分配給單例的對象文字。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/81160.html
摘要:想繼續(xù)了解設(shè)計模式必須要先搞懂面向?qū)ο缶幊?,否則只會讓你自己更痛苦。創(chuàng)建型設(shè)計模式主要有簡單工廠模式,工廠方法模式,抽象工廠模式,建造者模式,原型模式和單例模式,下面一一道來。而工廠方法模式本意是將實際創(chuàng)建對象的工作推遲到子類中。 接觸前端兩三個月的時候,那時候只是聽說設(shè)計模式很重要,然后我就去讀了一本設(shè)計模式的書,讀了一部分,也不知道這些設(shè)計模式到底設(shè)計出來干嘛的,然后就沒再看了。后...
摘要:常用設(shè)計模式大型單頁應(yīng)用里,復(fù)雜度上升到一定程度時,沒有適當(dāng)?shù)脑O(shè)計模式進行降耦,后續(xù)的開發(fā)也難以下手。而設(shè)計模式正是為了降耦而存在。特點滿足單一職責(zé)原則使用代理模式,不在構(gòu)造函數(shù)中判斷是否已經(jīng)創(chuàng)建過該單例滿足惰性原則應(yīng)用彈出登陸窗口。 JS常用設(shè)計模式 大型單頁應(yīng)用里,復(fù)雜度上升到一定程度時,沒有適當(dāng)?shù)脑O(shè)計模式進行降耦,后續(xù)的開發(fā)也難以下手。而設(shè)計模式正是為了降耦而存在。 單例模式 單...
摘要:作為一個前端新人,學(xué)習(xí)了設(shè)計模式以后,希望能從源頭上,用淺顯易懂的語言來解釋它。創(chuàng)建型設(shè)計模式創(chuàng)建型設(shè)計模式故名思意,這些模式都是用來創(chuàng)建實例對象的。這就是簡單工廠模式。這就是工廠方法模式。 作為一個前端新人,學(xué)習(xí)了設(shè)計模式以后,希望能從源頭上,用淺顯易懂的語言來解釋它。當(dāng)然不一定是正確的,只是我個人對設(shè)計模式的一點淺顯理解。 創(chuàng)建型設(shè)計模式 創(chuàng)建型設(shè)計模式:故名思意,這些模式都是用來...
摘要:抽象工廠模式是為了處理對象具有等級結(jié)構(gòu)以及對象族的問題。單例設(shè)計模式單例模式確保某一個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例,這個類成為單例類。 導(dǎo)語:設(shè)計模式是無數(shù)碼農(nóng)前人在實際的生產(chǎn)項目中經(jīng)過不斷的踩坑、爬坑、修坑的經(jīng)歷總結(jié)出來的經(jīng)驗教訓(xùn),經(jīng)過抽象之后表達成的概念。能夠幫助后來的設(shè)計者避免重復(fù)同樣的錯誤或者彎路。我也抽空整理了一下設(shè)計模式,用自己的話總結(jié)了一下,自認...
摘要:寫在前面設(shè)計模式是程序員通識知識,熟練掌握并使用各種設(shè)計模式,可以體現(xiàn)一個程序員的工程開發(fā)水平。我花了幾天時間,重溫并整理了多種設(shè)計模式,以為示例語言。節(jié)流模式對重復(fù)的業(yè)務(wù)邏輯進行節(jié)流控制,執(zhí)行最后一次操作并取消其他操作,以提高性能。 寫在前面 設(shè)計模式是程序員通識知識,熟練掌握并使用各種設(shè)計模式,可以體現(xiàn)一個程序員的工程開發(fā)水平。我花了幾天時間,重溫并整理了30多種設(shè)計模式,以Jav...
閱讀 3587·2023-04-25 22:45
閱讀 1351·2021-11-11 16:54
閱讀 2855·2019-08-30 15:44
閱讀 3249·2019-08-30 15:44
閱讀 1707·2019-08-30 13:55
閱讀 1009·2019-08-29 18:45
閱讀 1249·2019-08-29 17:25
閱讀 1069·2019-08-29 12:59