0

0

高级JavaScript_设计模式实战应用

狼影

狼影

发布时间:2025-11-25 16:16:02

|

794人浏览过

|

来源于php中文网

原创

单例模式确保类仅有一个实例,如全局状态管理;观察者模式实现对象间一对多通信,用于事件系统;工厂模式通过统一接口创建对象,提升扩展性;装饰器模式动态添加功能而不修改原对象,支持AOP。这些模式共同提升代码的可维护性、解耦性和复用性,是构建健壮JavaScript应用的核心实践。

高级javascript_设计模式实战应用

设计模式是解决常见问题的可复用方案,在高级JavaScript开发中,合理使用设计模式能显著提升代码的可维护性、可扩展性和协作效率。以下是一些在实际项目中广泛应用的设计模式及其具体应用场景。

1. 单例模式(Singleton Pattern)

单例模式确保一个类只有一个实例,并提供全局访问点。适用于管理共享资源,如配置中心、日志记录器或全局状态管理实例。

前端开发中,Vuex或Redux的store通常就是单例。手动实现时可通过闭包和静态属性控制实例化:

class Logger {
  constructor() {
    if (Logger.instance) {
      return Logger.instance;
    }
    this.logs = [];
    Logger.instance = this;
  }

  log(message) {
    this.logs.push(message);
    console.log(`[LOG] ${message}`);
  }
}

const logger1 = new Logger();
const logger2 = new Logger();
console.log(logger1 === logger2); // true

这种模式避免重复创建消耗资源的对象,但需注意测试时难以替换依赖。

立即学习Java免费学习笔记(深入)”;

2. 观察者模式(Observer Pattern)

观察者模式定义对象间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都会自动收到通知。常用于事件系统、数据绑定和响应式更新。

Vue.js 的响应式系统底层就基于此模式。简易实现如下:

class Subject {
  constructor() {
    this.observers = [];
  }

  subscribe(observer) {
    this.observers.push(observer);
  }

  notify(data) {
    this.observers.forEach(observer => observer.update(data));
  }
}

class Observer {
  update(data) {
    console.log("Received:", data);
  }
}

const subject = new Subject();
const obs1 = new Observer();
const obs2 = new Observer();

subject.subscribe(obs1);
subject.subscribe(obs2);
subject.notify("State changed!"); // 两个观察者都会收到消息

该模式解耦了发布者与订阅者,适合构建松耦合的组件通信机制。

Nanonets
Nanonets

基于AI的自学习OCR文档处理,自动捕获文档数据

下载

3. 工厂模式(Factory Pattern)

工厂模式用于创建对象而无需指定具体类,通过统一接口生成不同类型的实例。适用于需要根据条件动态创建对象的场景,比如表单控件渲染或API响应处理器

例如,根据不同用户角色返回对应的服务实例:

class AdminService {
  performAction() { return "Admin action executed"; }
}

class UserService {
  performAction() { return "User action executed"; }
}

function ServiceFactory(role) {
  switch(role) {
    case 'admin':
      return new AdminService();
    case 'user':
      return new UserService();
    default:
      throw new Error("Invalid role");
  }
}

const service = ServiceFactory('admin');
console.log(service.performAction());

工厂模式将对象创建逻辑集中管理,便于后期扩展新类型而不修改调用代码。

4. 装饰器模式(Decorator Pattern)

装饰器模式允许在不修改原对象的前提下动态添加功能。ES2022已支持装饰器语法,可用于类、方法或属性增强。

常见用途包括日志埋点、权限校验、缓存等:

function log(target, name, descriptor) {
  const original = descriptor.value;
  descriptor.value = function(...args) {
    console.log(`Calling "${name}" with`, args);
    return original.apply(this, args);
  };
  return descriptor;
}

class Calculator {
  @log
  add(a, b) {
    return a + b;
  }
}

const calc = new Calculator();
calc.add(2, 3); // 输出调用信息后再执行

该模式符合开放封闭原则——对扩展开放,对修改封闭,非常适合中间件和AOP编程。

基本上就这些。掌握这些设计模式并结合实际业务灵活运用,能让JavaScript代码更健壮、更易维护。关键不是死记硬背模式名称,而是理解其背后的思想:解耦、复用、可扩展。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

183

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

226

2025.12.18

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1946

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

658

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2399

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

47

2026.01.19

go语言闭包相关教程大全
go语言闭包相关教程大全

本专题整合了go语言闭包相关数据,阅读专题下面的文章了解更多相关内容。

152

2025.07.29

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

531

2023.06.20

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

1

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ThinkPHP6.x API接口--十天技能课堂
ThinkPHP6.x API接口--十天技能课堂

共14课时 | 1.2万人学习

第二十四期_PHP8编程
第二十四期_PHP8编程

共86课时 | 3.5万人学习

Laravel 8 课程精讲(台湾同胞版)
Laravel 8 课程精讲(台湾同胞版)

共22课时 | 2.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号