js设计模式 前端学习,很全
### JavaScript设计模式详解 在前端开发领域,设计模式是一种被广泛使用的编程思想,它能够帮助开发者更好地组织代码、提高代码的可维护性和可扩展性。接下来,我们将详细探讨两种重要的JavaScript设计模式——单例模式与工厂模式。 #### 单例模式 单例模式的核心理念是确保一个类只有一个实例,并提供一个全局访问点。这种模式非常适用于那些需要频繁创建和销毁对象的情况,例如全局配置管理等场景。单例模式通常有三种实现方式:使用JSON对象、构造函数以及闭包。 ##### 使用JSON对象 ```javascript var single = { word: 'hello world', say: function() { console.log(this.word); } }; var s1 = single; var s2 = single; console.log(s1 === s2); // true ``` 在这个例子中,我们定义了一个名为`single`的JSON对象,并且通过引用的方式创建了`s1`和`s2`两个变量。由于它们都指向同一个对象,因此`s1`和`s2`实际上是同一个对象的两个不同引用,所以它们的比较结果为`true`。 ##### 使用构造函数 ```javascript function Single() { if (typeof Single.instance === 'object') { return Single.instance; } this.name = 'hello world'; this.say = function() { console.log(this.name); }; Single.instance = this; return this; } var s1 = new Single(); var s2 = new Single(); console.log(s1 === s2); // true ``` 这段代码展示了如何通过构造函数实现单例模式。首先检查`Single.instance`是否已经存在,如果存在则直接返回这个实例;如果不存在,则创建一个新的实例并将其赋值给`Single.instance`,然后返回这个新创建的实例。这种方式确保了无论调用多少次`new Single()`,最终都只会有一个实例。 ##### 使用闭包 ```javascript function Single() { var instance = this; Single = function() { // 同名全局函数起到覆盖的作用,第二次 new 的时候,直接执行的是这个 return instance; } this.name = ''; this.setName = function(name) { this.name = name; } this.getName = function() { console.log(this.name); } } var s1 = new Single(); var s2 = new Single(); console.log(s1 === s2); // true s1.setName('tom'); s2.getName(); // tom ``` 这里利用闭包来保持实例的唯一性。第一次调用`new Single()`时会创建一个实例,并将构造函数`Single`重新定义为一个总是返回这个实例的函数,这样再次调用`new Single()`时就会返回之前创建的那个实例。 #### 工厂模式 工厂模式主要用于封装对象创建的过程。它的核心思想是定义一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。下面介绍两种工厂模式的实现方式:策略实现和闭包实现。 ##### 策略实现 ```javascript function Factory() { this.createEmployee = function(type) { var employee; switch (type) { case 'fulltime': employee = new FullTime(); break; case 'parttime': employee = new PartTime(); break; default: employee = new Temporary(); } employee.type = type; employee.say = function() { var word = this.type + ":" + this.money + '/小时'; console.log(word); } return employee; } } // 定义不同的员工类型 function FullTime() { this.money = '30 元'; } function PartTime() { this.money = '15 元'; } function Temporary() { this.money = '20 元'; } // 创建员工数组 var employeeArr = []; var factory = new Factory(); employeeArr.push(factory.createEmployee('fulltime')); employeeArr.push(factory.createEmployee('parttime')); employeeArr.push(factory.createEmployee('temporary')); employeeArr.forEach(function(employee) { employee.say(); }); ``` 上面的例子展示了如何使用策略模式来创建不同类型的员工对象。`Factory`类包含了一个`createEmployee`方法,根据传入的不同类型参数创建不同类型的员工对象。这种方法的优点在于易于扩展新的员工类型。 ##### 闭包实现 ```javascript var Car = (function () { var CarClass = function (model, year, miles) { this.model = model; this.year = year; this.miles = miles; this.state = function() { console.log(this.model, this.year, this.miles); } }; return function (model, year, miles) { return new CarClass(model, year, miles); }; })(); var tom = new Car("Tom", 2009, 50000); tom.state(); // 输出: Tom 2009 50000 ``` 这个示例使用闭包来实现工厂模式。闭包内部定义了一个`CarClass`构造函数,外部返回一个函数作为工厂函数,该函数接受参数并返回一个新的`CarClass`实例。这种方式的好处在于可以隐藏内部实现细节,只暴露必要的接口。 单例模式和工厂模式是JavaScript中非常实用的设计模式。它们不仅有助于提高代码的质量,还能够使得程序结构更加清晰、易于维护。在实际项目中灵活运用这些模式,可以使代码更加健壮、高效。
剩余35页未读,继续阅读
- 粉丝: 5
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- python数据分析与可视化ppt
- 詹唐宁动静禅 高能养元 充电赋能心理催眠.mp4
- 张萌萌姐微创业全能训练营认证班名师讲座.mp4
- 模拟量滤波防抖PLC程序 1,能实现电流电压和热电阻模拟量信号的采集,有滤波,原理就是去掉最大值及最小值,在取平均值 2,采用for循环指令和间接寻址,让程序简单好用,可多次代参重复调用 有详细注释
- 基于V2G技术的电动汽车实时调度策略 关键词:电动汽车 实时调度 V2G 网损 参考文档:《基于V2G技术的电动汽车实时调度策略》基本复现 仿真平台:MATLAB YALMIP+CVX 主要内容:代码
- IMG_20250109_165603.jpg
- IMG_20250109_165544.jpg
- IMG_20250109_165528.jpg
- 基于小生境粒子群算法的配电网有功-无功协调优化 主要内容:代码主要做的是考虑光伏出力波动性的配电网有功无功协调优化,在调度模型中考虑了光伏并网的波动性,并考虑用储能对其进行平抑,配电网调度模型中含有的
- 基于VS2022 MFC实现的Modbus报文解析工具源码
- 内螺旋覆盖算法(ISC)matlab代码
- 最新地图数据格式转换器
- 中国制造2025与工业4.0的相关介绍,还有与国外工业形式的对比
- 2024年江苏省职业技能大赛:网络建设与运维竞赛样题详解
- 猫头虎分享计算2024年博客之星每日可拉票次数程序.html
- python模拟随机红包发放程序