国产高清在线免费观看-国产高清在线免费无码-国产高清在线男人的天堂-国产高清在线视频-国产高清在线视频精品视频-国产高清在线视频伊甸园

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

JavaScript 最實用的8種設(shè)計模式

admin
2025年4月23日 7:56 本文熱度 207

本文將帶來最實用的 8 種設(shè)計模式及其典型應(yīng)用場景!

一、模塊模式(Module Pattern)

核心思想:

  • 封裝私有變量,通過閉包和 IIFE(立即執(zhí)行函數(shù))隱藏內(nèi)部實現(xiàn),只暴露公有        接口。

  • 應(yīng)用場景:工具庫封裝、避免全局污染、保護敏感數(shù)據(jù)。

const Counter = (function () {  let count = 0// 私有變量
  // 公有 API  return {    increment() {      count++;    },    getCount() {      return count;    },  };})();
Counter.increment();console.log(Counter.getCount()); // 1

二、工廠模式(Factory Pattern)

核心思想:

  • 將對象創(chuàng)建邏輯集中管理,代替直接使用 new 關(guān)鍵字。

  • 應(yīng)用場景:動態(tài)創(chuàng)建相似對象、屏蔽復雜構(gòu)造過程(如不同環(huán)境下的對象差異)。

class Button {  constructor(text, color) {    this.text = text;    this.color = color;  }}
// 工廠函數(shù)function createButton(type) {  switch (type) {    case 'primary':      return new Button('Submit''blue');    case 'danger':      return new Button('Delete''red');    default:      return new Button('Button''gray');  }}
const btn = createButton('primary');

三、單例模式(Singleton Pattern)

核心思想:

  • 確保全局唯一實例,避免重復創(chuàng)建。

  • 應(yīng)用場景:全局狀態(tài)管理(如 Redux/Vuex)、日志服務(wù)、數(shù)據(jù)庫連接池。

class Logger {  constructor() {    if (!Logger.instance) {      this.logs = [];      Logger.instance = this;    }    return Logger.instance;  }
  log(message) {    this.logs.push(message);    console.log(message);  }}
// 使用同一實例const logger1 = new Logger();const logger2 = new Logger();console.log(logger1 === logger2); // true

四、觀察者模式(Observer Pattern)

核心思想:

  • 事件驅(qū)動:解耦發(fā)布者(Subject)和訂閱者(Observer)。

  • 應(yīng)用場景:UI 事件監(jiān)聽、跨組件通信、實時數(shù)據(jù)更新。

class EventEmitter {  constructor() {    this.events = {};  }
  on(event, listener) {    if (!this.events[event]) {      this.events[event] = [];    }    this.events[event].push(listener);  }
  emit(event, ...args) {    if (this.events[event]) {      this.events[event].forEach(listener => listener(...args));    }  }}
// 使用示例const emitter = new EventEmitter();emitter.on('data'(data) => console.log('Received:', data));emitter.emit('data', { id1 }); // Received: { id: 1 }

五、代理模式(Proxy Pattern)

核心思想:

  • 攔截并控制對對象的訪問,ES6 原生支持 Proxy 對象。

  • 應(yīng)用場景:數(shù)據(jù)校驗、緩存、權(quán)限控制、日志記錄。

const user = {  name'John',  age30};
const validatorProxy = new Proxy(user, {  set(target, prop, value) {    if (prop === 'age' && typeof value !== 'number') {      throw new Error('Age must be a number');    }    target[prop] = value;    return true;  }});
validatorProxy.age = '30'// Error: Age must be a number

六、裝飾器模式(Decorator Pattern)

核心思想:

  • 動態(tài)擴展對象功能,不修改原有代碼。

  • 應(yīng)用場景:AOP(面向切面編程)、高階組件(React HOC)、日志增強。

function logDecorator(target, name, descriptor) {  const original = descriptor.value;  descriptor.value = function (...args) {    console.log(`Calling ${name} with args:`, args);    return original.apply(this, args);  };  return descriptor;}
class Calculator {  @logDecorator  add(a, b) {    return a + b;  }}
const calc = new Calculator();calc.add(23); // 輸出: Calling add with args: [2, 3]

七、策略模式(Strategy Pattern)

核心思想:

  • 定義算法族,動態(tài)切換策略,避免復雜的條件分支。

  • 應(yīng)用場景:表單驗證規(guī)則、支付方式選擇、游戲角色技能。

const strategies = {  add(a, b) => a + b,  subtract(a, b) => a - b,  multiply(a, b) => a * b,};

function calculate(strategy, a, b) {  return strategies[strategy](a, b);}

console.log(calculate('multiply'34)); // 12

八、組合模式(Composite Pattern)

核心思想:

  • 樹形結(jié)構(gòu)統(tǒng)一處理,讓單對象和組合對象行為一致。

  • 應(yīng)用場景:菜單組件、文件系統(tǒng)、UI 組件樹。

class MenuItem {  constructor(name) {    this.name = name;  }
  display() {    console.log(`Menu Item: ${this.name}`);  }}
class Menu {  constructor(name) {    this.name = name;    this.children = [];  }
  add(child) {    this.children.push(child);  }
  display() {    console.log(`Menu: ${this.name}`);    this.children.forEach(child => child.display());  }}
const rootMenu = new Menu('Root');rootMenu.add(new MenuItem('Home'));const subMenu = new Menu('Settings');subMenu.add(new MenuItem('Profile'));rootMenu.add(subMenu);rootMenu.display();

如何選擇設(shè)計模式?

  1. 優(yōu)先解決問題:不要為了用模式而用模式。

  2. 關(guān)注代碼可維護性:模式應(yīng)減少耦合,增強擴展性。

  3. 結(jié)合語言特性:JavaScript 適合函數(shù)式與原型鏈,靈活運用閉包和高階函數(shù)。

  4. 框架生態(tài)參考:如 React 的 Hooks、Vue 的 Composition API 已內(nèi)置模式思想。

?

總結(jié)


模式名稱
核心價值
典型場景
模塊模式
封裝私有邏輯
工具庫、避免全局污染
工廠模式
統(tǒng)一創(chuàng)建入口
動態(tài)生成對象、屏蔽構(gòu)造細節(jié)
單例模式
全局唯一實例
狀態(tài)管理、日志服務(wù)
觀察者模式
事件驅(qū)動解耦
實時通信、UI 交互
代理模式
控制對象訪問
數(shù)據(jù)校驗、緩存、攔截
裝飾器模式
動態(tài)擴展功能
日志增強、權(quán)限校驗
策略模式
靈活切換算法
表單驗證、支付策略
組合模式
樹形結(jié)構(gòu)統(tǒng)一操作
菜單組件、嵌套 UI

核心原則:理解模式背后的設(shè)計思想(如解耦、復用、擴展),比死記代碼更重要。


閱讀原文:原文鏈接


該文章在 2025/4/23 10:12:39 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产成人久久精品区一区二 | 国产精品狼人久久久久影院 | 国产亚洲AV一二三区在线观看 | 综合天天干夜夜摸 | 欧美人与人动人物 | 成人无码α片在线观看不卡 | 国产精品扒开腿做爽爽爽A片 | 麻豆精品国产片在线观看 | 国产偷窥熟妇高潮呻吟 | 亚洲秘无码一区二区三区蜜桃 | 国精品人妻无码一区二区三区软件 | 丰满人妻无奈张开双腿av | 国产三级无码内射在线看 | 亚洲tv精品一区二区三区 | 人妻有码中文字幕 | 日本少妇又色又爽又高潮 | 精品视频无码一区二区三区 | 亚洲午夜久久久无码精品网红a片视频阅读大全台湾无码a片 | 日韩污一区二区三区 | 亚洲卡4卡5卡6卡2025入口 | 激情欧美一区二区三区中文字幕 | 欧美不卡一区二区三区 | 亚洲综合色无码一 | 中文乱码人妻系列一区二区 | 国产欧美va欧美va香蕉在线 | 人妻精品秘一区二区视频解说高清完整版免费在线观 | 性无码专区综合的另类欧美在线播放 | 日韩av无码一区二区三区不卡 | 中文字幕av人妻一本二本 | 国语自产免费精品视频一区二区 | 国产精品久久午夜夜伦鲁鲁 | 亚洲精品欧美一区二区三区 | 国产一起色一起爱 | 亚洲 欧美 国产 图片 | 午夜国产亚洲精品一区 | 少妇无码一区二区二三区 | 日本大乳高潮视频在线观看 | 亚洲色无码国产精品网站可下载 | 亚洲一区二区三区中文字幕 | 日韩欧美精品有码在线 | 国内揄拍国产精品人妻电影 |