网站首页 > 技术文章 正文
想象你在办公室里只有一台打印机,所有人共享使用。如果每次打印都要重新组装一台新机器,不仅浪费资源,还可能引发耗材冲突。前端开发中的单例模式就像这台「共享打印机」,确保全局唯一实例,避免重复创建和资源浪费。
核心价值:
- 资源管控:共享WebSocket连接、缓存池等重量级资源
- 状态同步:确保全局数据一致性(如用户登录状态)
- 性能优化:避免重复初始化带来的性能损耗
必会实现技巧
1. 闭包封装法(通用性强)
Bash
const Singleton = (() => {
let instance;
function createInstance() {
return { api: "我是共享资源" };
}
return {
getInstance: () => instance || (instance = createInstance())
};
})();
// 使用
const s1 = Singleton.getInstance();
const s2 = Singleton.getInstance();
console.log(s1 === s2); // true
适用场景:浏览器环境、兼容ES5项目
2. ES6静态属性(现代框架推荐)
Bash
class CacheManager {
static instance;
constructor() {
if (CacheManager.instance) return CacheManager.instance;
this.data = {};
CacheManager.instance = this;
}
set(key, value) {
this.data[key] = value;
}
}
// 使用
const cache1 = new CacheManager();
const cache2 = new CacheManager();
cache1.set('user', '张三');
console.log(cache2.data.user); // 张三
优势:代码更符合现代框架规范,适合Vue/React项目
实战场景解析
场景1:全局状态管理(替代Redux轻量方案)
class GlobalState {
static instance;
constructor() {
if (GlobalState.instance) return GlobalState.instance;
this.state = { user: null };
GlobalState.instance = this;
}
// 状态更新方法...
}
价值:小型项目避免引入Redux复杂度,保持状态同步
场景2:弹窗控制器(性能优化)
const ModalController = (() => {
let modal;
return {
getModal: () => {
if (!modal) {
modal = document.createElement('div');
// 初始化弹窗DOM...
}
return modal;
}
};
})();
效果:避免重复创建/销毁DOM元素
场景3:API请求池(防止重复提交)
class RequestPool {
static instance;
constructor() {
if (RequestPool.instance) return RequestPool.instance;
this.pending = new Map();
RequestPool.instance = this;
}
add(requestId) {
if (this.pending.has(requestId)) return false;
this.pending.set(requestId, Date.now());
return true;
}
}
优势:有效拦截重复请求,降低服务器压力
- 上一篇: 「Web应用架构」模式:前端的后端(BFF)
- 下一篇: AI与数字孪生结合,彻底改变工厂设备控制模式
猜你喜欢
- 2025-04-30 交通运输:传统物流介入保税模式中前端 荐3股
- 2025-04-30 华安基金管理有限公司 关于旗下所有前端收费模式基金 在直销柜台实施费率优惠的公告
- 2025-04-30 博时基金管理有限公司 关于旗下所有前端收费模式基金 在直销柜台实施费率优惠的公告
- 2025-04-30 Bun v0.8.0发布!支持SvelteKit、Nuxt、OpenAI模式!
- 2025-04-30 真香!阿里架构师大牛万字详解redis 哨兵模式
- 2025-04-30 AI与数字孪生结合,彻底改变工厂设备控制模式
- 2025-04-30 「Web应用架构」模式:前端的后端(BFF)
- 2025-04-30 js设计模式:观察者模式,一个小例子帮忙理解一下。
- 2025-04-30 浅谈前端路由hash模式和history模式的区别
- 2025-04-30 2 万多行MyBatis源码,你知道里面用了多少种设计模式吗?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)