摘要:指向的是唯一實(shí)例化的對(duì)象返回結(jié)果是。實(shí)現(xiàn)方式創(chuàng)建類。構(gòu)造一個(gè)廣為人知的接口,供用戶對(duì)該類進(jìn)行實(shí)例化單例模式應(yīng)用實(shí)例我們用一個(gè)生活中常見的一個(gè)場(chǎng)景來說明單例模式的應(yīng)用。這就是單例模式的典型應(yīng)用。
單例模式的定義是:保證一個(gè)類僅有一個(gè)一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。
單例模式能在合適的時(shí)候創(chuàng)建對(duì)象,并且創(chuàng)建唯一的一個(gè)。
代碼接近于生活,很有意思。比如一個(gè)網(wǎng)站的登錄,點(diǎn)擊登錄后彈出一個(gè)登錄彈框,即使再次點(diǎn)擊,也不會(huì)再出現(xiàn)一個(gè)相同的彈框。又或者一個(gè)音樂播放程序,如果用戶打開了一個(gè)音樂,又想打開一個(gè)音樂,那么之前的播放界面就會(huì)自動(dòng)關(guān)閉,切換到當(dāng)前的播放界面。這些都是單例模式的應(yīng)用場(chǎng)景。
要實(shí)現(xiàn)一個(gè)單例模式,一個(gè)經(jīng)典的方式是創(chuàng)建一個(gè)類,類中又一個(gè)方法能創(chuàng)建該類的實(shí)例對(duì)象,還有一個(gè)標(biāo)記,記錄是否已經(jīng)創(chuàng)了過了實(shí)例對(duì)象。如果對(duì)象已經(jīng)存在,就返回第一次實(shí)例化對(duì)象的引用。
var Singleton = function(name) { this.name = name; //一個(gè)標(biāo)記,用來判斷是否已將創(chuàng)建了該類的實(shí)例 this.instance = null; } // 提供了一個(gè)靜態(tài)方法,用戶可以直接在類上調(diào)用 Singleton.getInstance = function(name) { // 沒有實(shí)例化的時(shí)候創(chuàng)建一個(gè)該類的實(shí)例 if(!this.instance) { this.instance = new Singleton(name); } // 已經(jīng)實(shí)例化了,返回第一次實(shí)例化對(duì)象的引用 return this.instance; }
用戶可以通過一個(gè)廣為人知的接口,對(duì)該實(shí)例進(jìn)行訪問。
我們嘗試對(duì)該對(duì)象進(jìn)行兩次實(shí)例化,觀察兩次實(shí)例化結(jié)果是否指向同一個(gè)對(duì)象。
var a = Singleton.getInstance("sven1"); var b = Singleton.getInstance("sven2"); // 指向的是唯一實(shí)例化的對(duì)象 console.log(a === b);
返回結(jié)果是:true。說明a、b之間是引用關(guān)系。
es6實(shí)現(xiàn)方式創(chuàng)建Singleton類。class關(guān)鍵字和靜態(tài)函數(shù)都是es6新增的。
class Singleton { constructor(name) { this.name = name; this.instance = null; } // 構(gòu)造一個(gè)廣為人知的接口,供用戶對(duì)該類進(jìn)行實(shí)例化 static getInstance(name) { if(!this.instance) { this.instance = new Singleton(name); } return this.instance; } }單例模式應(yīng)用實(shí)例
我們用一個(gè)生活中常見的一個(gè)場(chǎng)景來說明單例模式的應(yīng)用。
任意一個(gè)網(wǎng)站,點(diǎn)擊登錄按鈕,只會(huì)彈出有且僅有一個(gè)登錄框,即使后面再點(diǎn)擊登錄按鈕,也不會(huì)再彈出多一個(gè)彈框。這就是單例模式的典型應(yīng)用。接下來我們實(shí)現(xiàn)它。為了注重單例模式的展示,我們把登錄框簡(jiǎn)化吧
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/90305.html
摘要:什么是單例模式單例模式是一種十分常用但卻相對(duì)而言比較簡(jiǎn)單的單例模式。對(duì)象就是單例模式的體現(xiàn)??偨Y(jié)單例模式雖然簡(jiǎn)單,但是在項(xiàng)目中的應(yīng)用場(chǎng)景卻是相當(dāng)多的,單例模式的核心是確保只有一個(gè)實(shí)例,并提供全局訪問。 1. 什么是單例模式? 單例模式是一種十分常用但卻相對(duì)而言比較簡(jiǎn)單的單例模式。它是指在一個(gè)類只能有一個(gè)實(shí)例,即使多次實(shí)例化該類,也只返回第一次實(shí)例化后的實(shí)例對(duì)象。單例模式不僅能減少不必要...
摘要:目錄導(dǎo)語理解對(duì)象和面向?qū)ο蟮某绦蛟O(shè)計(jì)創(chuàng)建對(duì)象的方式的繼承機(jī)制原型對(duì)象原型鏈與原型對(duì)象相關(guān)的方法小結(jié)導(dǎo)語前面的系列文章,基本把的核心知識(shí)點(diǎn)的基本語法標(biāo)準(zhǔn)庫等章節(jié)講解完本章開始進(jìn)入核心知識(shí)點(diǎn)的高級(jí)部分面向?qū)ο蟮某绦蛟O(shè)計(jì),這一部分的內(nèi)容將會(huì)對(duì)對(duì)象 目錄 導(dǎo)語 1.理解對(duì)象和面向?qū)ο蟮某绦蛟O(shè)計(jì) 2.創(chuàng)建對(duì)象的方式 3.JavaScript的繼承機(jī)制 3.1 原型對(duì)象 3.2 原型鏈 3.3 與...
摘要:我們今天也來做一個(gè)萬能遙控器設(shè)計(jì)模式適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。今天要介紹的仍然是創(chuàng)建型設(shè)計(jì)模式的一種建造者模式。設(shè)計(jì)模式的理論知識(shí)固然重要,但 計(jì)算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計(jì)模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對(duì)容器接口對(duì)象進(jìn)行操作,第二類是返回一個(gè)容器接口對(duì)象,上節(jié)我們介紹了...
摘要:我們今天也來做一個(gè)萬能遙控器設(shè)計(jì)模式適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。今天要介紹的仍然是創(chuàng)建型設(shè)計(jì)模式的一種建造者模式。設(shè)計(jì)模式的理論知識(shí)固然重要,但 計(jì)算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計(jì)模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對(duì)容器接口對(duì)象進(jìn)行操作,第二類是返回一個(gè)容器接口對(duì)象,上節(jié)我們介紹了...
閱讀 2549·2021-10-11 10:59
閱讀 2718·2021-09-22 15:49
閱讀 2652·2021-08-13 13:25
閱讀 1297·2019-08-30 13:14
閱讀 2399·2019-08-29 18:45
閱讀 3005·2019-08-29 18:36
閱讀 1498·2019-08-29 13:21
閱讀 1171·2019-08-26 11:44