javascript的设计模式有哪些_单例模式如何实现?

2次阅读

javaScript中最推荐的单例实现是模块级单例,利用es6模块默认导出的天然单例特性,简洁、可靠且符合语言习惯;其次为ES6 class配合静态工厂方法,避免直接new;闭包方式适用于ES5环境。

javascript的设计模式有哪些_单例模式如何实现?

javascript 中常用的设计模式有单例、工厂、观察者(发布-订阅)、策略、代理、装饰器、适配器、命令、状态、迭代器等。其中单例模式最常用于管理全局唯一实例,比如配置中心、日志对象、弹窗管理器、状态存储等。

单例模式的核心要点

单例确保一个类只有一个实例,并提供一个全局访问点。关键在于:控制实例创建时机 + 防止重复构造 + 统一返回已有实例。

  • 不能直接用 new 多次生成新对象
  • 首次调用时创建实例,后续调用都返回同一个引用
  • 通常封装在闭包或模块作用域中,避免污染全局

基础版单例实现(ES5风格)

用闭包保存私有实例变量,通过静态方法暴露统一入口:

var Singleton = (function() {   var instance = null;   function createInstance() {     return { data: 'I am the only one' };   }   return {     getInstance: function() {       if (!instance) {         instance = createInstance();       }       return instance;     }   }; })();  // 使用 var a = Singleton.getInstance(); var b = Singleton.getInstance(); console.log(a === b); // true

ES6 Class + 静态属性方式(推荐)

更符合现代写法,清晰易读,也支持延迟初始化:

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

javascript的设计模式有哪些_单例模式如何实现?

迷你天猫商城

迷你天猫商城是一个基于Spring Boot的综合性B2C电商平台,需求设计主要参考天猫商城的购物流程:用户从注册开始,到完成登录,浏览商品,加入购物车,进行下单,确认收货,评价等一系列操作。 作为迷你天猫商城的核心组成部分之一,天猫数据管理后台包含商品管理,订单管理,类别管理,用户管理和交易额统计等模块,实现了对整个商城的一站式管理和维护。所有页面均兼容IE10及以上现代浏览器。部署方式1、项目

javascript的设计模式有哪些_单例模式如何实现? 0

查看详情 javascript的设计模式有哪些_单例模式如何实现?

class Logger {   constructor() {     if (Logger.instance) {       return Logger.instance;     }     this.logs = [];     Logger.instance = this;   }    log(msg) {     this.logs.push(msg);   } }  // 手动绑定初始实例(可选) Logger.instance = null;  // 使用 const logger1 = new Logger(); const logger2 = new Logger(); console.log(logger1 === logger2); // true

注意:这种写法依赖构造函数内判断,需确保所有调用都走 new Logger(),否则可能绕过单例逻辑。更稳妥的方式是禁用直接 new,只暴露静态工厂方法:

class Config {   constructor(data) {     this.data = data;   }   static getInstance() {     if (!Config._instance) {       Config._instance = new Config({ env: 'prod' });     }     return Config._instance;   } }  // 使用 const c1 = Config.getInstance(); const c2 = Config.getInstance();

模块级单例(最自然的 js 方式)

利用 ES6 模块的单例特性——模块默认导出本身就是单例,无需额外封装:

// config.js export default {   apiUrl: 'https://api.example.com',   timeout: 5000,   setEnv(env) {     this.env = env;   } };  // main.js import config from './config.js'; import config2 from './config.js'; console.log(config === config2); // true ✅

这是 JavaScript 中最轻量、最可靠、也最符合语言习惯的单例实现,适合大多数场景。

基本上就这些。单例不复杂但容易忽略边界情况,比如线程(JS 是单线程,所以不用考虑竞态),重点是控制好实例的创建和复用逻辑。模块导出方式最推荐,简洁又安全。

以上就是

text=ZqhQzanResources