前端——設計模式

0 設計模式分類

  • 創建型:幫助創建對象(工廠模式、單例模式、建造者模式、原型模式)
  • 結構型:幫助設計代碼結構(適配器模式、裝飾者模式、享元模式)
  • 行為型:幫助組織模塊行為(策略模式、職責鏈模式、命令模式)
  • 技巧型:優化代碼的技巧

1 策略模式

需求:用戶管理和組織管理中存在相同的處理操作:創建、編輯、詳情,針對編輯和詳情,對于不同字段又有不同的處理方式,導致最后寫了很多if else,那為什么不能復用,寫一段可維護的代碼?

export const processDefaultValueFn = {create: () => {},update: () => {},detail: () => {}
}export updateCaseFn = {string: () => {},boolean: () => {}
}

2 適配器模式

需求:組件數據來源由原來的單一來源改為多個接口來源,但原有接口無法改變,因此需要適配,在項目中,我們大多都是單一數據源

3 單例模式

定義:保證一個類僅有一個實例,并提供一個訪問它的全局訪問點

例子:采用單例模式創建dom元素

//單一職責原則,該函數只用于創建DOM元素,不關注創建的DOM元素是什么,將創建DOM元素的內容代理至外部函數中
const createDOM = function(fn) {var resultreturn function() {return result || (fn.apply(this, arguments))	}
}const createDiv = function (){return div
}const createSpan = function(){return span
}createDOM(createDiv)
createDOM(createSpan)

4 代理模式

用法:當不方便訪問一個對象時,提供一個代理對象來控制對這個對象的訪問

緩存代理:例如useMemo

5 發布-訂閱模式

例如:登陸后需要進行一系列設置,導致后續有業務需要添加在登錄成功后的函數中,需要加代碼

通常寫法:

login.success(()=>{header.setAvatar(data)nav.setAvatar()
})

改進寫法:

$.ajax('',()=>{login.trigger(data)
})//各模塊監聽登錄成功的消息
const header = (()=>{login.listen('success',(data) => {header.setAvatar(data)})
})()

6 命令模式

應用場景:有些時候需要向某個對象發送請求,但是不知道請求的接收者是誰,請求的操作是什么。通過命令模式解耦請求發送者和請求接收者之間的聯系

優點

  • 發布者和接收者之間解耦
  • 可以使用棧來維護一個請求隊列,從而實現撤銷、連續點擊等功能

缺點

  • 額外增加一個命令對象,使得代碼變得復雜

7 組合模式

分析:創建一顆命令樹,每個樹的葉子節點包含一個execute方法,js中實現組合模式的難點在于必須保證組合對象和葉對象擁有相同的方法
缺點:樹的結果如果比較復雜,性能會受到影響,可以采用職責鏈模式避免遍歷整棵樹

應用場景:表示對象的部分-整體結構,統一對待樹中的所有對象

8 享元模式(用于性能優化,時間換空間)

該模式要求將對象的屬性劃分為內部屬性和外部屬性

  • 內部屬性:存儲于對象內部,可以被一些對象共享,獨立于具體場景,不會改變
  • 外部屬性:取決于具體場景,并根據場景變化,不能共享

應用場景:多文件上傳優化

適用場景

  • 使用大量對象造成很大的內存開銷
  • 對象的大多數狀態可以轉換成外部狀態

使用閉包來私有化對象

const uploadFactory = function() {const obj = {}return {create: function(type) {if (obj[type]) {return obj[type]}return obj[type] = new Upload(type)}	}
}

9 中介者模式

其實就是發布-訂閱模式
應用場景:對象之間的耦合性太高,更改一個對象后還需更改另一個對象,中介者模式使對象之間的關系解耦
缺點:中介者對象可能會非常復雜

10 裝飾器模式

給某個對象動態添加某個功能,并且不影響使用這個對象的其他對象

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

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

相關文章

Pyqt5實現多線程程序

主從架構 Pyqt常常使用**主從架構(Master-Workers 架構)**來避免界面卡死的情況。 Master-Workers 架構就像它的名字,一個master統領著幾個workers一起干活。其中某個worker倒下了不會導致整體任務失敗。matser不用干活,因此可以…

分布式鎖之基于redis實現分布式鎖(二)

2. 基于redis實現分布式鎖 2.1. 基本實現 借助于redis中的命令setnx(key, value),key不存在就新增,存在就什么都不做。同時有多個客戶端發送setnx命令,只有一個客戶端可以成功,返回1(true);其他…

市場是變化的?這種悖論fpmarkets澳福一秒打破

你是不是始終認為市場是經常變化的,其實這是不對的,這種認識fpmarkets澳福今天一秒打破。 市場經常變化嗎?眾多投資者無需過多思考,就認為答案是肯定的。因為無論是在互聯網的哪個角落,都可以看到這樣的信息。即使我們沒有深入研…

NLP基本知識

NLP基本知識 詞嵌入&詞向量 詞嵌入(Word Embedding)是一種將單詞或文本轉化為向量表示的技術,它在自然語言處理(NLP)中廣泛應用。詞嵌入的目標是將文本數據映射到一個低維度的向量空間中,以便計算機可…

Python---函數的嵌套(一個函數里面又調用了另外一個函數)詳解

函數嵌套調用------就是一個函數里面又調用了另外一個函數。 基本語法: # 定義 函數B def funcB():print(這是funcB函數的函數體部分...)# 定義 函數A def funcA():print(- * 80) # 這一行為了更好區分print(這是funcA函數的函數體部分...)# 假設我們在調用funcA…

設計模式-Adapter

定義 適配器設計模式是一種結構型設計模式,用于將一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。 適配器模式包括三種形式:類適配器模式、對象適配器模式、接口適配器模式&a…

Ubuntu18 Opencv3.4.12 viz 3D顯示安裝、編譯、使用、移植

Opencv3.*主模塊默認包括兩個3D庫 calib3d用于相機校準和三維重建 ,viz用于三維圖像顯示,其中viz是cmake選配。 參考: https://docs.opencv.org/3.4.12/index.html 下載linux版本的源碼 sources。 查看cmake apt list --installed | grep…

App Cleaner Uninstaller Pro 一鍵清理,徹底卸載Mac應用

隨著科技的不斷發展,Mac電腦已經成為許多用戶工作和娛樂的首選。然而,隨著時間的推移,我們的Mac電腦上可能會堆積大量的無效文件和冗余數據,這不僅占用了寶貴的磁盤空間,還可能影響到系統的運行速度。為了解決這一問題…

基于51單片機zigbee溫室大棚監控系統

**單片機設計介紹,基于51單片機zigbee溫室大棚監控系統 文章目錄 一 概要二、功能設計設計思路 三、 軟件設計原理圖 五、 程序六、 文章目錄 一 概要 基于51單片機和Zigbee技術的溫室大棚監控系統是一種用于監測和控制溫室大棚環境的設備。以下是一個基本的設計介…

STM32 CAN通信自定義數據包多幀連發亂序問題

場景: can標準幀中每一幀只能傳輸8字節,而應用中傳輸一包的內容往往超過8字節,因此需要把一個包拆成多個幀發送,接收端才把收到的多幀重新組裝成一個完整的包 問題描述 在一問一答的兩塊板間通信,多幀連發是能夠按照…

UDP分片和丟包與TCP效果對比

UDP 分片 與 丟包,UDP 真的比 TCP 高效嗎? UDP(用戶數據報協議)和TCP(傳輸控制協議)在很多方面都有顯著的區別。總體來說,TCP更適合需要可靠傳輸的應用,例如網頁瀏覽、電子郵件等&a…

信創系列之大數據,分布式數據庫產業鏈跟蹤梳理筆記…

并購優塾 投行界的大叔,大叔界的投行 【產業鏈地圖,版權、內容與免責聲明】1)版權:版權所有,違者必究,未經許可不得翻版、摘編、拷貝、復制、傳播。2)尊重原創:如有引用未標注來源…

CentOS 7啟動時報“Started Crash recovery kernel arming.....shutdown....”問題處理過程

有臺虛擬機由于CPU負載過高而宕機,宕機重啟后停在“Started Crash recovery kernel arming…shutdown…”階段,如下所示: 重置虛擬機,進入grub菜單,按e編輯啟動選項,在linux16 行末,加上&…

【考研】數據結構(更新到循環鏈表)

聲明&#xff1a;所有代碼都可以運行&#xff0c;可以直接粘貼運行&#xff08;只有庫函數沒有聲明&#xff09; 線性表的定義和基本操作 基本操作 定義 靜態&#xff1a; #include<stdio.h> #include<stdlib.h>#define MaxSize 10//靜態 typedef struct{int d…

【追求卓越02】數據結構--鏈表

引導 今天我們進入鏈表的學習&#xff0c;我相信大家對鏈表都很熟悉。鏈表和數組一樣&#xff0c;作為最基礎的數據結構。在我們的工作中常常會使用到。但是我們真的了解到數組和鏈表的區別嗎&#xff1f;什么時候使用數組&#xff0c;什么時候使用鏈表&#xff0c;能夠正確的選…

監控員工上網有什么軟件

監控員工上網的軟件主要用于監控員工在工作時間內的網絡行為&#xff0c;包括瀏覽網頁、使用社交媒體、發送郵件等。通過監控員工上網行為&#xff0c;企業管理者可以更好地了解員工的工作狀態和行為&#xff0c;規范員工的上網行為&#xff0c;提高工作效率&#xff0c;同時也…

SSL證書對網站的作用及影響?

SSL證書作為當下互聯網的重要安全件&#xff0c;包括搜索引擎的收錄、網站是否具備信任的條件以及HTTP2.0傳輸協議的相互作用等&#xff0c;尤其是瀏覽器對古老的http協議警告提示不安全將直接影響到用戶的信任度以及品牌形象&#xff0c;對于網站來說可謂是必不可少。 SSL證書…

Webstorm 插件文件目錄顏色分析——白藍綠紅黃灰

Webstorm 插件文件目錄【白色、藍色、綠色、紅色、黃色、灰色】對應當前文件發生什么了&#xff0c;即文件夾當前狀態。 WebStrom配置好git或SVN后文件顏色代表的含義&#xff1a; 白色&#xff1a;本地無修改內容 藍色&#xff1a;文件內容有修改&#xff0c;暫未提交到git…

python命令行 引導用戶填寫可用的ip地址和端口號

字多不看&#xff0c;直接體驗 待補充 演示代碼 # -*- coding:UTF-8 -*- """ author: dyy contact: douyaoyuan126.com time: 2023/11/23 10:29 file: 引導用戶填寫可用的ip地址和端口號.py desc: xxxxxx """# region 引入必要的依賴 import …

C語言-判斷上三角矩陣

上三角矩陣指主對角線以下的元素都為0的矩陣&#xff1b;主對角線為從矩陣的左上角至右下角的連線。 本題要求編寫程序&#xff0c;判斷一個給定的方陣是否上三角矩陣。 輸入格式&#xff1a; 輸入第一行給出一個正整數T&#xff0c;為待測矩陣的個數。接下來給出T個矩陣的信…