设计模式并非是难以理解, 或是难以应用到实践中的, 相反的, 设计模式恰恰代表了某些场景下的最佳实践! 这些设计模式通常被有经验的开发者们所采用。
设计模式是开发者们在开发过程中面临的一般问题的解决方案。 这些解决方案是众多开发者们经过长时间的实验和错误所总结出来的
本文将讲解前端 (javascript) 的设计模式概念!
传统开发工程中, 单例模式就是保证一个类只有一个实例, 在javascript中, 单例作为一个命名空间提供者, 在全局变量或局部变量中提供一个唯一的访问点即可, 如以下实现代码
- 使用字面量形式实现单例模式
var single = {
name: '单例模式',
toString: function() {
return 'Hello world!';
}
}
- 或是使用构造函数形式实现单例模式
function Single(name) {
var that = this;
this.name = name || '单例模式';
// 只能够创建一次, 第二次将返回实例
Single = function() {
return that;
}
}
Single.prototype.toName = function() {
return this.name;
}
var single = new Single;
- 或是使用闭包, 只暴露某些属性和方法
var single = (function() {
var name = '单例模式';
var a = 100;
var b = 200;
var toName = function() {
return name + a;
}
return {
name: name,
toName: toName
}
})();
无论如何实现单例模式, 但在具体工程中, 只会存在一个Single实例, 即为单例模式
使用场景
单例模式一般使用场景为系统中不会重复创建的模块, 如页面开始时, 会加载一些配置和属性, 这些配置和属性是一定存在且只需要一份就够了, 不会存在需要多分的情况, 这时就适合使用单例模式
注意事项
单例模式一般不推荐使用构造函数生成, 因为使用字面量速度会比构造函数快, 而且字面量本身强调了这个对象的唯一性, 但具体实现方法还是要根据场景不同而选择不同的实现方式
其他设计模式
构造函数模式: https://www.jianshu.com/p/cf809d980459
建造者模式: https://www.jianshu.com/p/70cf4bb80549
简单工厂模式: https://www.jianshu.com/p/4293450926c2
抽象工厂模式: https://www.jianshu.com/p/d6138f36e6e2
装饰者模式: https://www.jianshu.com/p/16cf284ab810
外观模式: https://www.jianshu.com/p/179ae2a13c59