摘要:以上,吐槽完畢設(shè)計(jì)模式主要分為三大類創(chuàng)建型模式結(jié)構(gòu)型模式行為模式。單例模式所謂單例模式,是指僅實(shí)例化該類一次,該實(shí)例提供一個(gè)眾所周知的全局訪問(wèn)點(diǎn)。單例模式暫時(shí)這么些,如果后續(xù)了解更多會(huì)默默補(bǔ)充上來(lái),下一次會(huì)分享工廠模式。
初入js坑時(shí),滿臉懵逼的我認(rèn)為設(shè)計(jì)模式就該是后端頭疼的,對(duì),頭疼,蓋因粗略掃描下來(lái)也就十幾二十種吧,彼時(shí)頗有種隔岸觀火看到你過(guò)得不好我也就安心的自得。染鵝,打臉啪啪的,實(shí)不應(yīng)忘記javascript前可不是白綴個(gè)java的,怎么能不趟一下設(shè)計(jì)模式這“渾水”。
--以上,吐槽完畢
設(shè)計(jì)模式主要分為三大類:創(chuàng)建型模式、結(jié)構(gòu)型模式、行為模式。本篇只涉及創(chuàng)建型模式,表問(wèn)我為什么,因?yàn)槠渌麅煞N我也不了解,淚目。
所謂創(chuàng)建型模式,是指基于創(chuàng)建對(duì)象的概念。單例模式、工廠模式、抽象工廠模式就屬于典型的創(chuàng)建型模式。
單例模式所謂單例模式,是指僅實(shí)例化該類一次,該實(shí)例提供一個(gè)眾所周知的全局訪問(wèn)點(diǎn)。為什么要限制僅實(shí)例化一次呢?因?yàn)槿种恍枰粋€(gè)poly啊。例如在封裝組件Alert的時(shí)候,只需要實(shí)例化一次,將該實(shí)例掛在全局對(duì)象下,這樣除了第一次調(diào)用的時(shí)候需要實(shí)例化,后續(xù)都是在確認(rèn)已有Poly實(shí)例后,直接調(diào)用已有的唯一實(shí)例,只是需要傳入不同的提示語(yǔ)句作為參數(shù)。
- 懶漢式
// code 1 var poly = (function(){ var instance; var Poly = function(){ this.name = "Poly"; }; return { getInstance: function(){ if (!instance) { instance = new Poly(); console.log("init onece"); } return instance; } } })();
運(yùn)行結(jié)果如下:
以上代碼,只打印了一次init onece,除了第一次走進(jìn)if (!instance)條件語(yǔ)句中進(jìn)行實(shí)例化,后續(xù)兩次并沒(méi)有實(shí)例化,而是直接返回Poly的實(shí)例。
- 餓漢式
你應(yīng)該看出來(lái)了,以上代碼是在調(diào)用poly對(duì)象的getInstance方法時(shí)才進(jìn)行實(shí)例化,還有一種情形是poly對(duì)象獲得的直接是Poly類的一個(gè)實(shí)例,如下:
// code 2 var poly = (function(){ var instance; var Poly = function(){ this.name = "Poly"; }; if (!instance) { instance = new Poly(); console.log("init onece"); } return instance; })();
運(yùn)行結(jié)果如下:
code 1 和 code 2所展示的是單例模式的兩種使用方式:懶漢式和餓漢式(這名字略粗獷的趕腳?蜜汁微笑?)。懶漢式即延遲到使用時(shí)才實(shí)例化,餓漢式即一開(kāi)始加載類時(shí)就實(shí)例化。前者省空間,后者省時(shí)間,按需食用,oh不,按需使用。
單例模式暫時(shí)這么些,如果后續(xù)了解更多會(huì)默默補(bǔ)充上來(lái),下一次會(huì)分享工廠模式。
話說(shuō),貌似說(shuō)了很多“下一次”這類話?難怪懂得這么多道理還減不好這場(chǎng)肥。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/81216.html
摘要:但是如何在對(duì)構(gòu)造函數(shù)使用操作符創(chuàng)建多個(gè)對(duì)象的時(shí)候僅獲取一個(gè)單例對(duì)象呢。單例的實(shí)例引用單例構(gòu)造函數(shù)單例私有屬性和方法暴露出來(lái)的對(duì)象改進(jìn)之前在構(gòu)造函數(shù)中重寫自身會(huì)丟失所有在初始定義和重定義之間添加到其中的屬性。 1. 單例模式 單例模式 (Singleton) 的實(shí)現(xiàn)在于保證一個(gè)特定類只有一個(gè)實(shí)例,第二次使用同一個(gè)類創(chuàng)建新對(duì)象的時(shí)候,應(yīng)該得到與第一次創(chuàng)建對(duì)象完全相同的對(duì)象。當(dāng)創(chuàng)建一個(gè)新對(duì)象...
摘要:?jiǎn)卫J秸f(shuō)到單例設(shè)計(jì)模式,中經(jīng)常使用的單例模式通常分兩種,懶漢模式和餓漢模式懶漢模式簡(jiǎn)單寫了下私有化構(gòu)造函數(shù)在獲取實(shí)例的方法中返回實(shí)例化對(duì)象雖然很多大佬都寫過(guò)啦,但是小生為了加深記憶便再寫一遍雖然實(shí)現(xiàn)了單例模式,但是未考慮到線程安全,多個(gè)線 java單例模式 說(shuō)到單例設(shè)計(jì)模式,Java中經(jīng)常使用java的單例模式通常分兩種,懶漢模式和餓漢模式 懶漢模式 class singleDemo...
摘要:文章系列設(shè)計(jì)模式單例模式設(shè)計(jì)模式策略模式設(shè)計(jì)模式代理模式概念單例模式的定義是保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。在開(kāi)發(fā)中,單例模式的用途同樣非常廣泛。 前言 本系列文章主要根據(jù)《JavaScript設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐》整理而來(lái),其中會(huì)加入了一些自己的思考。希望對(duì)大家有所幫助。 文章系列 js設(shè)計(jì)模式--單例模式 js設(shè)計(jì)模式--策略模式 js設(shè)計(jì)模式--代理模式 概念...
摘要:什么是設(shè)計(jì)模式設(shè)計(jì)模式是一種能夠被反復(fù)使用,符合面向?qū)ο筇匦缘拇a設(shè)計(jì)經(jīng)驗(yàn)的總結(jié),合理的使用設(shè)計(jì)模式能夠讓你得代碼更容易維護(hù)和可靠設(shè)計(jì)模式的類型共分為創(chuàng)建型模式,結(jié)構(gòu)型模式,行為型模式三種創(chuàng)建型模式創(chuàng)建型模式是對(duì)一個(gè)類的實(shí)例化過(guò)程進(jìn)行了抽象 什么是設(shè)計(jì)模式 設(shè)計(jì)模式是一種能夠被反復(fù)使用,符合面向?qū)ο筇匦缘拇a設(shè)計(jì)經(jīng)驗(yàn)的總結(jié),合理的使用設(shè)計(jì)模式能夠讓你得代碼更容易維護(hù)和可靠設(shè)計(jì)模式的類型...
摘要:什么是單例模式單例模式是一種十分常用但卻相對(duì)而言比較簡(jiǎn)單的單例模式。對(duì)象就是單例模式的體現(xiàn)??偨Y(jié)單例模式雖然簡(jiǎn)單,但是在項(xiàng)目中的應(yīng)用場(chǎng)景卻是相當(dāng)多的,單例模式的核心是確保只有一個(gè)實(shí)例,并提供全局訪問(wèn)。 1. 什么是單例模式? 單例模式是一種十分常用但卻相對(duì)而言比較簡(jiǎn)單的單例模式。它是指在一個(gè)類只能有一個(gè)實(shí)例,即使多次實(shí)例化該類,也只返回第一次實(shí)例化后的實(shí)例對(duì)象。單例模式不僅能減少不必要...
閱讀 2938·2023-04-26 02:22
閱讀 2292·2021-11-17 09:33
閱讀 3144·2021-09-22 16:06
閱讀 1078·2021-09-22 15:54
閱讀 3541·2019-08-29 13:44
閱讀 1921·2019-08-29 12:37
閱讀 1327·2019-08-26 14:04
閱讀 1920·2019-08-26 11:57