这篇文章主要介绍了什么是单例单例模式、使用场景,提供了 3 个示例给大家参考
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
什么是单例?
单例要求一个类有且只有一个实例,提供一个全局的访问点。因此它要绕过常规的控制器,使其只能有一个实例,供使用者使用,而使用着不关心有几个实例,因此这是设计者的责任
- In JavaScript,
- Singletons serve as a shared resource namespace which isolate implementation code from the global namespace so as to provide a single point of access
- for functions.
在 javascript 中,单例被当做一个全局的命名空间,提供一个访问该对象的一个点。
使用场景
- In practice, the Singleton pattern is useful when exactly one object is needed to coordinate others across a system.
单例比较适用于一个对象和其他系统进行交互。
类比
单例有点类似于一个小组的小组长,在一段时间内只有一个小组长,有小组长来指定组员的工作,分配和协调和组员的工作。
实例 1:这个是最简单的单例,通过 key,value 的形式存储属性和方法
- var A = {
- xx:3,
- yy:4,
- B:function(el){
- },
- C:function(el){
- },
- D:function(el){
- },
- E:function(el){
- }
- }
实例 2:首先创建一个实例的引用,然后判断这个实例是否存在,如果不存在那么就创建,存在的话,就直接返回,保证有且只有一个。
- var mySingleton = (function () {
// Instance 存储一个单例实例的引用
var instance;
function init() {
// Singleton
// 私有的方法和变量
function privateMethod(){
console.log("I am private");
}
var privateVariable = "Im also private";
return {
// 共有的方法和变量
publicMethod: function () {
console.log("The public can see me!");
},
publicProperty: "I am also public"
};
};
return {
// 如果实例不存在,那么创建一个
getInstance: function () {
if (!instance) {
instance = init();
}
return instance;
}
};
})();
var singleA = mySingleton;
var singleB = mySingleton;
console.log(singleA === singleB); // true
来源: