LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

JavaScript 最实用的8种设计模式

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

本文将带来最实用的 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', { id1 }); // Received: { id: 1 }

五、代理模式(Proxy Pattern)

核心思想:

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

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

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)

核心思想:

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

  • 应用场景: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)

核心思想:

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

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

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)

核心思想:

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

  • 应用场景:菜单组件、文件系统、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-2025 ClickSun All Rights Reserved