淺談幾種js設計模式

JavaScript設計模式是開發中常用的一種解決方案,它們幫助開發者以一種更結構化、更易維護的方式編寫代碼。本文將深入介紹幾種常見的JavaScript設計模式,包括單例模式、工廠模式、觀察者模式和策略模式。

一、單例模式(Singleton Pattern)

單例模式是一種創建型模式,確保一個類只有一個實例,并提供一個全局訪問點。

實現方式
class Singleton {constructor() {if (!Singleton.instance) {Singleton.instance = this;}return Singleton.instance;}someMethod() {console.log('Hello, Singleton!');}
}const instance1 = new Singleton();
const instance2 = new Singleton();console.log(instance1 === instance2); // true
instance1.someMethod(); // Hello, Singleton!
?
使用場景
  • 需要確保全局只有一個實例的情況,例如全局配置對象、數據庫連接等。

二、工廠模式(Factory Pattern)

工廠模式是一種創建型模式,通過工廠方法創建對象,而不是直接使用new操作符。

實現方式
class Car {constructor(model) {this.model = model;}drive() {console.log(`${this.model} is driving.`);}
}class CarFactory {static createCar(model) {return new Car(model);}
}const car1 = CarFactory.createCar('Toyota');
const car2 = CarFactory.createCar('Honda');car1.drive(); // Toyota is driving.
car2.drive(); // Honda is driving.
?
使用場景
  • 當對象的創建邏輯復雜或需要根據條件創建不同類型的對象時使用工廠模式。

三、觀察者模式(Observer Pattern)

觀察者模式是一種行為型模式,定義了對象間的一對多依賴,當一個對象的狀態發生改變時,所有依賴它的對象都會收到通知并自動更新。

實現方式
class Subject {constructor() {this.observers = [];}addObserver(observer) {this.observers.push(observer);}removeObserver(observer) {this.observers = this.observers.filter(obs => obs !== observer);}notifyObservers() {this.observers.forEach(observer => observer.update());}
}class Observer {update() {console.log('Observer notified.');}
}const subject = new Subject();
const observer1 = new Observer();
const observer2 = new Observer();subject.addObserver(observer1);
subject.addObserver(observer2);subject.notifyObservers();
// Observer notified.
// Observer notified.
?
使用場景
  • 用于實現事件處理機制,如事件監聽器、發布-訂閱模式等。

四、策略模式(Strategy Pattern)

策略模式是一種行為型模式,定義了一系列算法,并將每個算法封裝起來,使它們可以互換使用。

實現方式
class StrategyContext {constructor(strategy) {this.strategy = strategy;}setStrategy(strategy) {this.strategy = strategy;}executeStrategy(data) {return this.strategy.execute(data);}
}class ConcreteStrategyA {execute(data) {return `Strategy A with data: ${data}`;}
}class ConcreteStrategyB {execute(data) {return `Strategy B with data: ${data}`;}
}const context = new StrategyContext(new ConcreteStrategyA());
console.log(context.executeStrategy('test')); // Strategy A with data: testcontext.setStrategy(new ConcreteStrategyB());
console.log(context.executeStrategy('test')); // Strategy B with data: test
?
使用場景
  • 當需要在運行時切換算法或行為時使用策略模式,例如不同的排序算法、不同的支付方式等。

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

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

相關文章

手寫 Vue 中虛擬 DOM 到真實 DOM 的完整過程

目錄 一、虛擬 DOM 的核心概念 二、虛擬 DOM 到真實 DOM 的流程 三、手寫虛擬 DOM 到真實 DOM 的實現 1. 定義虛擬 DOM 的結構(VNode) 2. 創建虛擬 DOM 轉真實 DOM 的函數 3. 掛載虛擬 DOM 到頁面 4. 更新虛擬 DOM 的過程(Diff 算法簡化…

jmm--volatile

指令重排基礎概念 在現代處理器和編譯器為了提高程序執行效率,會對指令進行優化,其中一種優化方式就是指令重排序。在單線程環境下,指令重排序不會影響最終執行結果,因為處理器和編譯器會保證重排序后的執行結果與按照代碼順序執行…

【硬件開發】濾波電容的選擇:原理、計算與多電壓值應用實踐

濾波電容的選擇:原理、計算與多電壓值應用實踐 1. 引言 在現代電子系統中,穩定的電源供應是保證電路可靠運行的基礎。然而,電源線上往往不可避免地存在各種噪聲和紋波,這些干擾可能源自電源本身(如整流后的脈動直流&…

【seismic unix數據生成-unif2】

Seismic Unix簡介 Seismic Unix(SU)是由科羅拉多礦業學院(Colorado School of Mines)開發的開源地震數據處理軟件包,專為地震勘探數據分析和研究設計。它提供了一系列命令行工具,支持從數據加載、處理到可…

【逆向思考 并集查找】P2391 白雪皚皚|省選-

本文涉及知識點 C并集查找 P2391 白雪皚皚 題目背景 “柴門聞犬吠,風雪夜歸人”,冬天,不期而至。千里冰封,萬里雪飄。空中刮起了鴨毛大雪。雪花紛紛,降落人間。 美能量星球(pty 在 spore 上的一個殖民地…

一文講清楚React中setState的使用方法和機制

文章目錄 一文講清楚React中setState的使用方法和機制1. setState是什么2. setState方法詳解2.1 setState參數詳解2.2 setState同步異步問題2.2.1 setState異步更新2.2.2 setState同步更新 一文講清楚React中setState的使用方法和機制 1. setState是什么 React中,…

01_軟件卓越之道:功能性與需求滿足

引言 在軟件的世界里,功能性是產品與用戶之間的第一橋梁。一個軟件即使擁有華麗的界面和極致的性能,如果不能解決用戶的核心需求,也終將被市場淘汰。本文將深入探討如何確保軟件的功能性與用戶需求完美契合。 1. 需求理解:從模糊…

StarRocks × Tableau 連接器完整使用指南 | 高效數據分析從連接開始

一、導語:為什么選擇 StarRocks Tableau 連接器? 在當今數據驅動的商業環境中,企業不僅需要一個能夠處理海量數據的高性能分析數據庫,還需要一個直觀、強大的可視化工具來解讀數據背后的故事。StarRocks 作為新一代極速全場景 MP…

基于 SpringBoot+VueJS 助農生鮮銷售系統設計與實現7000字論文實現

摘要本論文設計并實現了一個基于 SpringBoot 和 VueJS 的助農生鮮銷售系統。系統采用前后端分離架構,前端使用 VueJS 框架實現用戶界面,后端使用 SpringBoot 框架構建服務,通過 MyBatis 實現數據持久化。系統實現了農產品展示、在線購物、訂單…

Pytest 測試發現機制詳解:自動識別測試函數與模塊

概述 在編寫自動化測試時,如何讓 Pytest 自動找到你的測試代碼 是一個非常基礎但重要的問題。Pytest 通過其強大的 測試發現(Test Discovery)機制,能夠自動掃描項目目錄、識別測試模塊和測試函數,從而大大簡化了測試流程。 本文將為你詳細講解 Pytest 的測試發現機制,包…

MySQL 時間日期函數

時間日期類型 MySQL中主要支持以下幾種時間日期類型: DATE - 日期類型 格式:YYYY-MM-DD范圍:1000-01-01 到 9999-12-31示例:2023-05-20 TIME - 時間類型 格式:HH:MM:SS范圍:-838:59:59 到 838:59:59示例&…

408第三季part2 - 計算機網絡 - 物理層

理解 這里有8個波形,每個波形代表一個馬原,一個馬原代表多個比特,這里3個比特 求波特率就直接2W 求比特率就要乘log2V 這塊記兩公式就行,一個下面一個上面 題目 4個相位加4種幅度就是有16種波形 這里無噪聲就是奈奎斯特定理 這…

iOS 集成RN Installing glog (0.3.5)報錯的解決方案

在集成執行RN bundle exec pod install 命令到Installing glog (0.3.5)時報錯,報錯信息如下: Installing glog (0.3.5) [!] /bin/bash -c set -e #!/bin/bash # Copyright (c) Facebook, Inc. and its affiliates. # # This source code is licensed under the MIT license …

【進階篇-消息隊列】——MQTT協議如何支持海量的在線IoT設備

目錄 一、什么是IoT二、MQTT 和其他消息隊列的傳輸協議有什么不同三、如何選擇 MQTT 產品四、MQTT 集群如何支持海量在線的 IoT 設備五、總結本文來源:極客時間vip課程筆記 一、什么是IoT IoT,也就是物聯網,物聯網這個詞兒,它的含義還不那么直觀,但你看它的英文:IoT,也就…

Chat Model API

聊天模型API為開發人員提供了將人工智能聊天完成功能集成到應用程序中的能力。它利用預訓練的語言模型,如GPT(生成預訓練轉換器),以自然語言對用戶輸入生成類似人類的響應。 API通常通過向人工智能模型發送提示或部分對話來工作&…

【黑群暉】自組硬件/舊電腦nas改造(三)——使用Jellyfin創建家庭影音庫

一、打開套件中心安裝Jellyfin套件 如果找不到Jellyfin套件,需要手動添加三方套件源: 《群暉NAS必學技能:一鍵解鎖三方套件源,PT下載影音播放全搞定!》 二、配置Jellyfin 訪問http://群暉IP:8096 進入Jellyfin初始化界…

泰山派編譯debian報錯 lb config: unrecognized option ‘--debootstrap-options‘

簡介 最近在編譯泰山派 編譯buildroot系統正常,但是編譯debian時總是報錯說lb 找不到一些參數,如下圖所示,應該當前的版本較低 不支持這些參數,我試了很多方法 升級次版本 但是提示的是最新的,最后經過一番搜索 在官方…

跨境證券交易系統合規升級白皮書:全鏈路微秒風控+開源替代,護航7月程序化交易新規落地

1 行業變革:四重驅動力重塑證券交易系統 當前全球證券行業正處于深刻變革期,跨境金融活動面臨前所未有的機遇與挑戰。今日央行開展的1310億元7天期逆回購操作,以及國家外匯管理局向合格境內機構投資者(QDII)新增發放30.8億美元投資額度等政策…

Node.js核心API(fs篇)

前言:在Node.js生態系統中,文件系統操作是后端開發不可或缺的一部分。fs模塊作為Node.js核心API的重要組成部分,提供了與文件系統交互的能力,涵蓋了從基礎的文件讀寫到復雜的目錄操作等功能。現代JavaScript開發中,處理…

HarmonyOS學習2---Stage模型

1、工程目錄結構 1.1、入口 UIAbility 1.2、入口page 1.3、配置文件 1、配置文件 1)應用級配置文件 --- app.json5 2)模塊級配置文件 --- module.json5 3、oh-package.json5 4、資源文件 1)element目錄 2)media目錄 3&#xff09…