JavaScript中常用设计模式包括单例模式和工厂模式:单例确保类仅有一个实例,用于配置管理等场景;工厂封装对象创建逻辑,解决条件化实例化问题,二者可组合使用但适用场景不同。

JavaScript 中常用的设计模式包括单例模式、工厂模式、观察者模式、发布-订阅模式、代理模式、装饰器模式、策略模式、适配器模式、命令模式、状态模式等。其中,单例模式和工厂模式是入门级但高频使用的两种,它们分别解决“唯一实例管理”和“对象创建解耦”问题。
单例模式:确保一个类只有一个实例
核心思想是:第一次调用时创建实例,之后每次都返回同一个引用。常用于配置管理、全局状态、日志器、弹窗管理器等场景。
实现关键点:
用闭包或静态属性缓存实例 构造函数内部判断是否已存在实例,有则直接返回 避免通过 new 多次创建新对象
基础实现(ES5/ES6 兼容):
立即学习“Java免费学习笔记(深入)”;
class Singleton { constructor() { if (Singleton.instance) { return Singleton.instance; } this.data = Math.random(); Singleton.instance = this; }}// 使用const a = new Singleton();const b = new Singleton();console.log(a === b); // true
更推荐的写法(不依赖 new,更安全):
const Singleton = (function () { let instance; function createInstance() { return { data: Math.random() }; } return { getInstance() { if (!instance) { instance = createInstance(); } return instance; } };})();// 使用const a = Singleton.getInstance();const b = Singleton.getInstance();console.log(a === b); // true
工厂模式:把对象创建逻辑集中封装
适用于需要根据条件生成不同对象类型,且创建过程较复杂的情况。它把 new 操作从调用方抽离,提升可维护性和扩展性。
常见分类:
简单工厂:一个函数或类,接收参数并返回具体实例(非严格设计模式,但实用) 工厂方法:定义创建接口,子类决定实例化哪个类(需结合继承) 抽象工厂:创建产品族,适合多维度变化(JS 中较少用,因无接口/抽象类原生支持)
简单工厂示例(处理不同类型的表单校验器):
class EmailValidator { validate(value) { return /^[^s@]+@[^s@]+.[^s@]+$/.test(value); }}class PhoneValidator { validate(value) { return /^1[3-9]d{9}$/.test(value); }}class ValidatorFactory { static create(type) { switch (type) { case 'email': return new EmailValidator(); case 'phone': return new PhoneValidator(); default: throw new Error(`Unknown validator type: ${type}`); } }}// 使用const emailV = ValidatorFactory.create('email');const phoneV = ValidatorFactory.create('phone');
单例 vs 工厂:使用场景辨析
两者解决的问题不同,不互斥,甚至可以组合使用:
单例关注“多少个”——只允许一个;工厂关注“怎么造”——统一创建入口 可以写一个单例工厂:比如全局唯一的 ValidatorFactory 实例 避免滥用单例:过度使用会导致隐式依赖、难以测试;工厂若无实际分支逻辑,可能画蛇添足
判断是否该用单例:这个对象是否天然具有全局唯一性?是否所有模块都应共享同一份状态?
判断是否该用工厂:创建逻辑是否分散、重复?是否未来会新增多种类型?是否希望调用方不关心具体构造细节?
以上就是javascript设计模式有哪些_单例模式和工厂模式如何实现的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1544148.html
微信扫一扫
支付宝扫一扫