单例,全局只有一个实例
单例模式可以分为懒汉式和饿汉式:
- 懒汉式单例模式:在类加载时不初始化。
- 饿汉式单例模式:在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快。
我把之前java写的删除掉了,由于现在做前端,所以使用js来写出常用的例子。
常见写法:
1.利用闭包的形式,保存实例化后的对象。(推荐)
let A = function(name){
let a;
return function(name){
if(!a){
// 生成a,此处可以给定a的各种默认属性
a = {};
}
a.name = name;
return a
}
}();
- 利用function可以设置属性,即挂载到function的某属性上
function A1(name){
if(!A.instance){
// 生成a,此处可以给定a的各种属性
A.instance = {};
}
A.instance.name = name;
return A.instance;
};
// 这种方式呢,有个缺点就是由于挂载到A.instance,所以外部是可以访问的。
// 有可能会在外部对值进行删除修改,
//如:delete A.instance;
//如:A.instance = null;
上面两种是属于懒汉式?还是饿汉式?当然是懒汉喽
下面再给出一个饿汉式的
let A = function(name){
// 生成a,此处可以给定a的各种默认属性
let a = {};
return function(name){
a.name = name;
return a
}
}();
// 这种就属于饿汉式。
网友评论