單例模式及應用場景

如果希望自己的代碼更優雅、可維護性更高以及更簡潔,往往離不開設計模式這一解決方案。

在JS設計模式中,最核心的思想:封裝變化(將變與不變分離,確保變化的部分靈活,不變的部分穩定)。

那么來說說第一個常見的設計模式:單例模式

單例模式保證一個類僅有一個實例,并提供一個訪問它的全局訪問方式,為了解決一個全局使用的類頻繁被創建和銷毀、占用內存的問題。

?比如,當系統中某個接口的結構已經無法滿足我們現在的業務需求,但又不能改動這個接口,因為可能原來的系統很多功能都依賴于這個接口,改動接口會牽扯到太多文件。因此應對這種場景,我們可以很快地想到可以用適配器模式來解決這個問題。 下面介紹幾種在JavaScript中常見的幾種設計模式:

1、單例模式

單例模式的定義:?保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。實現的方法為先判斷實例存在與否,如果存在則直接返回,如果不存在就創建了再返回,這就確保了一個類只有一個實例對象。 適用場景:一個單一對象。比如:彈窗,無論點擊多少次,彈窗只應該被創建一次。

class CreateUser {    constructor(name) {        this.name = name;        this.getName();    }    getName() {         return this.name;    }
}// 代理實現單例模式
var ProxyMode = (function() {    var instance = null;    return function(name) {        if(!instance) {            instance = new CreateUser(name);        }        return instance;    
}})();// 測試單體模式的實例
var a = new ProxyMode("aaa");
var b = new ProxyMode("bbb");// 因為單體模式是只實例化一次,所以下面的實例是相等的console.log(a === b);    //true

?ES5通過閉包?

在ES5中,可以使用閉包(函數內部返回函數被外界變量所引用,導致這個函數里面的變量無法被釋放,就構建成閉包)來保存這個類的實例。

var Singeton = (function(){var instance;function User(name,age){this.name=name;this.age=age;}return function(name,age){if(!instance){instance = new User(name,age)}return instance}
})()

?此時這個實例一旦生成,每次都是返回這個實例,且不會被修改,可以看到下面的代碼,當給 User 對象初始賦值 name:alice,age:18 時,以后再賦值便無效了,以及每次返回都是初始的實例對象。

ES6中使用類的靜態屬性

以上代碼使用ES6語法來實現,通過類的靜態屬性來保存唯一的實例對象。

class Singeton {constructor(name,age){if(!Singeton.instance){this.name = name;this.age = age;Singeton.instance = this;}return Singeton.instance;}
}

?創建方式仍然是一樣的,通過 new 關鍵字創建類的實例對象。

案例

那這樣一種設計模式在開發中實際有什么用途呢?我們試想這樣一個業務場景:訪問網站時,很久沒有操作頁面,此時授權過期,當我們點擊頁面上的任何一個地方,都會彈出一個登錄框。

那么這個登錄框,是全局唯一的,不會存在多份,也不會互相沖突,所以不需要每次都創建一份,保留初始那一份就夠了。

JavaScript設計模式之單例模式應用場景案例詳解_JavaScript_腳本之家

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717784.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717784.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717784.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[嵌入式系統-36]:龍芯1B 開發學習套件 -5- PMON常見命令

目錄 0. 開機時按c鍵進入pmon模式 (自啟動模式時) 1、幫助命令 h 2、顯示設備信息 devls 3.重啟:reboot 4、設置環境變量 set/unset 5.查詢環境變量:env 6.網絡設置相關命令: ①設置IP:ifconfig&am…

Linux 基礎IO(1)內存文件

文章目錄 鋪墊文件的系統調用接口文件描述符緩沖區 鋪墊 文件文件內容 文件屬性訪問文件之前,都要先打開文件,而要訪問,修改,編輯文件,文件就必須加載到內存中程序運行起來變成進程,被CPU調度,…

詳解Win 7重置電腦操作步驟

文章目錄 介紹Win 7 重置系統的方法:1.按下鍵盤上的Windows鍵和R鍵,打開運行窗口,輸入sysprep 點擊回車確定。2.之后就會出現如下界面,在這個新打開的窗口中雙擊 sysprep 程序3.選擇【進入系統全新體驗(00BE) 】&#…

基于SpringBoot的在線拍賣系統(附項目源碼+論文)

摘要 在線拍賣系統,主要的模塊包括管理員;首頁、個人中心、用戶管理、商品類型管理、拍賣商品管理、歷史競拍管理、競拍訂單管理、留言板管理、系統管理,用戶;首頁、個人中心、歷史競拍管理、競拍訂單管理、留言板管理&#xff0…

Linux重新獲取IP地址

你可以通過重啟客戶端來獲取新的IP地址。可以使用以下命令來重啟DHCP客戶端: sudo dhclient -r # 釋放當前IP sudo dhclient # 獲取新的IP 這將釋放當前的IP地址,并請求新的IP地址。 使用ifdown和ifup命令:另一種方法是使用ifdown和i…

STM32學習和實踐筆記(1): 裝好了的keil μVision 5

2019年3月在淘寶上買了這塊STM32的開發板,學了一段時間后就丟下了,今天重新撿起來,決定好好學習、天天向上。 對照教程,今天先把keil5裝上了。 裝的過程有以下幾點值得記錄下: 1)用注冊機時,…

【應用多元統計分析】--多元數據的直觀表示(R語言作圖)

例1.2 為了研究全國31個省、市、自治區2018年城鎮居民生活消費的分布規律,根據調查資料做區域消費類型劃分。 指標: 食品x1:人均食品支出(元/人) 衣著x2:人均衣著商品支出(元/人) 居住x3:人均居住支出(元/人) 生活x4…

歐拉回路(Eulerian Path)

1.定義 如果圖 G G G(有向圖或者無向圖)中所有邊一次僅且一次行遍所有頂點的通路稱作歐拉通路。 如果圖 G G G中所有邊一次僅且一次行遍所有頂點的回路稱作歐拉回路。 具有歐拉回路的圖成為歐拉圖(簡稱 E E E圖)。具有歐拉通路但不具有歐拉回路的圖成為半歐拉圖。 頂點可以經…

【Linux】Linux常用指令介紹

目錄 1、whoami命令 2、pwd命令 3、ls命令 4、cd命令 5、touch命令 6、mkdir命令 7、rm命令 8、man命令 9、cp命令 10、mv命令 11、cat命令 12、more命令 13、less命令 14、head命令 15、tail命令 16、find命令 1、whoami命令 語法:whoani 功能&a…

SpringMVC--03--前端傳數組給后臺

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 案例1乘客個人信息方法1:表單提交,以字段數組接收方法2:表單提交,以BeanListModel接收方法3:將Json對象序…

leetcode移除元素

注意,在本題中,是對原數組進行操作,需要原地刪除指定元素,所以我們可以采用快慢指針來操作。 顧名思義,快慢指針是有兩個指針,一直快指針,一個慢指針。在本題中,快慢指針起點都是0&a…

解鎖人體姿態的秘密:部件親和場(PAF)的革新應用

部件親和場(PAF)原理及其在人體姿態估計中的應用 摘要: 隨著人工智能技術的發展,人體姿態估計在計算機視覺領域受到越來越多的關注。部件親和場(Part Affinity Fields,簡稱PAF)作為一種新興的人體姿態估計技術,通過構建2D向量場來描述人體肢體的方向和位置信息,從而…

Matlab 機器人工具箱 運動學

文章目錄 R.fkine()R.ikine()R.ikine6s()R.ikuncR.jacob0、R.jacobn、R.jacob_dotjtrajctraj參考鏈接 官網:Robotics Toolbox - Peter Corke R.fkine() 正運動學,根據關節坐標求末端執行器位姿 mdl_puma560; % 加載puma560模型 qz % 零角度 qr …

繼承(使用及深入、super、重寫/復寫)--學習JavaEE的day14

day14 一、繼承 概念 Java中的繼承是一個對象獲取父對象的所有屬性和行為的機制 理解:繼承是指一個類(子類)可以繼承另一個類(父類)的屬性和方法 關鍵字extends 優點:減少代碼的冗余 缺點:繼承會增加類與類之間的關系,會增加代碼…

[Unity3d] 網絡開發基礎【個人復習筆記/有不足之處歡迎斧正/侵刪】

TCP/IP TCP/IP協議是一 系列規則(協議)的統稱,他們定義了消息在網絡間進行傳輸的規則 是供已連接互聯網的設備進行通信的通信規則 OSI模型只是一個基本概念,而TCP/IP協議是基于這個概念的具體實現 TCP和UDP協議 TCP:傳輸控制協議,面向連接&#xff0c…

VsCode配置PCL、Open3D自動補全

寫在前面 本文內容 在VsCode上開發PCL、Open3D相關代碼,代碼自動補全 Open3D、PCL的安裝使用見各個版本的Open3D、PCL的編譯、使用教程 平臺/環境 windows11(windows10): visual studio 2022;cmake 3.22; VsCode 通過cmake構建項目; 轉載請…

Excel MATCH函數 兩張順序不同表格,統一排序

目錄 一. 背景二. 添加輔助列,使用MATCH函數生成排序條件三. 效果 一. 背景 有如下圖所示的兩張表格,分別記錄著同一批人的1月份和2月份的工資。表格A和表格B中的姓名列相同,工資列數據不同現在要求參考表格A中的姓名列對表格B中的數據進行排序&#xf…

C語言:預處理

C語言:預處理 預定義符號#define定義常量定義宏宏與函數對比 #操作符##操作符條件編譯頭文件包含庫文件包含本地文件包含嵌套文件包含 預定義符號 C語?設置了?些預定義符號,可以直接使?,預定義符號也是在預處理期間處理的。 __FILE__ //…

多智能體強化學習簡介

基礎概念 什么是多智能體系統 多智能體系統(Multi-Agent System,MAS)是由多個自主智能體組成的系統。這些智能體可以協同工作,也可以獨立行動,以實現各自的目標。在多智能體系統中,每個智能體都有自己的決…

在你的 Vue + Electron 項目里,引入 ESLint

因為我的項目是基于 Electron 平臺的 Web 應用,使用 Vue 3 實現,而且用了 TypeScript,所以,在引入 ESLint 的時候,要考慮好幾種規范的問題。 文章目錄 零、簡介1. 規則2. 配置文件3. 共享配置4. 插件5. 解析器6. 自定義…