
js常用设计模式
发布日期:2021-05-10 07:22:43
浏览次数:12
分类:精选文章
本文共 3227 字,大约阅读时间需要 10 分钟。
在现代开发中,选择正确的开发模式至关重要。这些模式涵盖了从简单的变量封装到复杂的应用架构设计。以下是对几种常见模式的分析和比较:
1. 模块模式
模块模式通过将代码分成独立的模块,每个模块只能通过特定的接口与外界交互。这种方式虽然限制了一部分功能的外部访问,但有效避免了变量泄露的问题。模块化使得代码更易维护和扩展。传统的模块模式如下所示:
var Person = (function() { var name = 'xin'; var age = 22; function getName() { return name; } function getAge() { return age; } return { getName: getName, getAge: getAge };})();
**优点:**代码封装性强,变量 Private Only可访问限制,代码可维护性好。
2. 构造函数模式
构造函数模式结合了对象的面向对象编程和HTML DOM的一些特性,允许创建自定义对象。这种方式常用于实现对象的继承和多态。
function Person(name, age) { this.name = name; this.age = age;}Person.prototype = { constructor: Person, printName: function() { console.log(this.name); }, printAge: function() { console.log(this.age); }};var person = new Person('xin', 22);person.printName(); // xin
**优点:**支持继承,代码复用率较高,便于对象化开发。
3. 混合模式
混合模式结合了容器的架构模式,使子类可以继承父类的属性和方法,通过改变原型链实现多态。
function Person(name, age) { this.name = name; this.age = age;}Person.prototype.printName = function() { console.log(this.name);};function Student(name, age) { Person.call(this, name, age);}Student.prototype = create(Person.prototype); // 继承 Person 的原型Student.prototype.printAge = function() { console.log(this.age);};var student = new Student('x', 22);student.printName(); // x
**优点:**支持灵活的继承机制,可动态改变原型。
4. 工厂模式
工厂模式适用于创建多个相同类型的对象,提供的一次性工厂方法简化单例创建过程。
function Person(name, age) { var person = new Object(); person.name = name; person.age = age; person.printName = function() { console.log(person.name); }; person.printAge = function() { console.log(person.age); }; return person;}var person = Person('x', 22);
**优点:**简化了对象的单次创建流程,便于管理对象的创建过程。
5. 单例模式
单例模式确保一个特定的对象只能被创建一次,避免了内存浪费和多实例带来的潜在问题。
var Singleton = (function() { var instance; function init() { return { name: 'singleton', age: 30 }; } function getInstance() { if (!instance) { instance = init(); } return instance; } return { getInstance: getInstance };})();
**优点:**避免了多实例带来的内存开销,确保资源的优化利用。
6. 发布-订阅模式
发布-订阅模式是一种非侵入式的事件处理机制,允许多个订阅者在发布者发生事件时被触发。
var EventCenter = (function() { var events = {}; function on(evt, handler) { events[evt] = events[evt] || []; events[evt].push({ handler: handler }); } function fire(evt, args) { if (!events[evt]) return; for (var i = 0; i < events[evt].length; i++) { events[evt][i].handler(args); } } return { on: on, fire: fire };})();EventCenter.on('change', function(val) { console.log('change... now val is ', val);});EventCenter.on('click', function(val) { console.log('click.... now val is ', val);});EventCenter.fire('change', 'xin');EventCenter.fire('click', 'xin');EventCenter.off('change');
**优点:**降低耦合度,代码结构更加灵活,无需硬编码通知机制。
7. 策略模式
策略模式通过抽象出各个算法,将灵活性集中起来,实现代码维护的递优化。
var calculates = { 'A': function(salary) { return salary * 4; }, 'B': function(salary) { return salary * 3; }, 'C': function(salary) { return salary * 2; }};function calculateBonus(level, salary) { return calculates[level](salary);}console.log(calculateBonus('A', 10000)); // 40000
**优点:**避免复杂的if-else结构,便于扩展和维护。
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年04月18日 06时48分07秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
张一鸣:创业7年,我经历的5件事
2019-03-07
SQL基础语法
2019-03-07
SQL 已死,但 SQL 将永存
2019-03-07
Python3 日期和时间
2019-03-07
JavaScript实现表格排序
2019-03-07
vue散碎知识点学习
2019-03-07
Flask连接Mysql安装及设置操作
2019-03-07
周报二
2019-03-07
周报十一
2019-03-07
git拉取远程指定分支代码
2019-03-07
C语言--C语言总结大纲
2019-03-07
轻松理解前后端分离(通俗易懂)
2019-03-07
JavaFX官方文档
2019-03-07
ORA-12154: TNS: 无法解析指定的连接标识符
2019-03-07
Spring学习总结(十二):Spring中的事务管理
2019-03-07
G7相关
2019-03-07
Linux 激活网卡ifconfig eth1 up 和 ifup eth1 之间的差别
2019-03-07
In App Purchase Verification using PHP
2019-03-07
Mapper.xml中新增数据并返回主键ID(MYSQL)
2019-03-07