LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

JavaScript 最实用的8种设计模式

admin
2025年4月23日 7:56 本文热度 4790

本文将带来最实用的 8 种设计模式及其典型应用场景!

一、模块模式(Module Pattern)

核心思想:

  • 封装私有变量,通过闭包和 IIFE(立即执行函数)隐藏内部实现,只暴露公有        接口。

  • 应用场景:工具库封装、避免全局污染、保护敏感数据。

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

二、工厂模式(Factory Pattern)

核心思想:

  • 将对象创建逻辑集中管理,代替直接使用 new 关键字。

  • 应用场景:动态创建相似对象、屏蔽复杂构造过程(如不同环境下的对象差异)。

class Button {  constructor(text, color) {    this.text = text;    this.color = color;  }}
// 工厂函数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)

核心思想:

  • 确保全局唯一实例,避免重复创建。

  • 应用场景:全局状态管理(如 Redux/Vuex)、日志服务、数据库连接池。

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)

核心思想:

  • 事件驱动:解耦发布者(Subject)和订阅者(Observer)。

  • 应用场景:UI 事件监听、跨组件通信、实时数据更新。

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', { id: 1 }); // Received: { id: 1 }

五、代理模式(Proxy Pattern)

核心思想:

  • 拦截并控制对对象的访问,ES6 原生支持 Proxy 对象。

  • 应用场景:数据校验、缓存、权限控制、日志记录。

const user = {  name: 'John',  age: 30};
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)

核心思想:

  • 动态扩展对象功能,不修改原有代码。

  • 应用场景: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(2, 3); // 输出: Calling add with args: [2, 3]

七、策略模式(Strategy Pattern)

核心思想:

  • 定义算法族,动态切换策略,避免复杂的条件分支。

  • 应用场景:表单验证规则、支付方式选择、游戏角色技能。

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', 3, 4)); // 12

八、组合模式(Composite Pattern)

核心思想:

  • 树形结构统一处理,让单对象和组合对象行为一致。

  • 应用场景:菜单组件、文件系统、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();

如何选择设计模式?

  1. 优先解决问题:不要为了用模式而用模式。

  2. 关注代码可维护性:模式应减少耦合,增强扩展性。

  3. 结合语言特性:JavaScript 适合函数式与原型链,灵活运用闭包和高阶函数。

  4. 框架生态参考:如 React 的 Hooks、Vue 的 Composition API 已内置模式思想。

​

总结


模式名称
核心价值
典型场景
模块模式
封装私有逻辑
工具库、避免全局污染
工厂模式
统一创建入口
动态生成对象、屏蔽构造细节
单例模式
全局唯一实例
状态管理、日志服务
观察者模式
事件驱动解耦
实时通信、UI 交互
代理模式
控制对象访问
数据校验、缓存、拦截
装饰器模式
动态扩展功能
日志增强、权限校验
策略模式
灵活切换算法
表单验证、支付策略
组合模式
树形结构统一操作
菜单组件、嵌套 UI

核心原则:理解模式背后的设计思想(如解耦、复用、扩展),比死记代码更重要。


阅读原文:原文链接


该文章在 2025/4/23 10:12:39 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-1  粤公网安备44030602007207号