浅谈对单例模式的理解(JS)

1.单例模式的核心作用

保证一个类只有一个实例对象,并且为此实例对象提供一个全局访问点。

2.常见的应用场景

(1)Windows的任务管理器、回收站;
(2)操作系统的文件系统;
(3)应用程序的日志;
(4)网站的计数器;
(5)项目中读取配置文件;
(6)数据库连接点;等等很多。

3. 单例模式的优点

(1)只有一个实例对象,减少了内存和性能的开销,特别是当一个对象占用很多资源时,不用重复创建,可以用永久暂存的方式来解决重复创建带来的内存问题。
(2)优化环共享资源访问。

4.创建单例模式的方式

饿汉式和懒汉式
(1)饿汉式
A. js的普通实现方式,利用instance属性来实现。但存在构造函数外部修改instance属性的问题。

function Singleton(){
if(typeof Singleton.instance=="object"){//判断是否已经有实例对象
return Singleton.instance;//有的话,返回该实例对象
}
Singleton.instance=this;//若没有实例对象,则第一次创建。
return this;
}
var n1=new Singleton();
var n2=new Singleton();
console.log(n1===n2);//true

B. 用闭包的形式来创建单例模式,虽然增加了闭包资源,但能够保证实例对象只能在构造函数内部修改。

function Singleton(){
var instance=this;
Singleton=function(){//重写构造函数
return instance;
}
}
var n1=new Singleton();
var n2=new Singleton();
console.log(n1===n2);//true

(2)懒汉式

const Lasy=(function(){
let _instance;//单例模式的引用变量
function Singleton(){//单例模式的构造函数
const info="singleton";
return {
methords:()={console.log(info);},
mess:"1.0"
};
}
return _instance||_instance=Single();//如果当前已有实例则返回该实例,若没有实例对象则创建。短路或,左边为真则返回左边,左边为假则返回右边。


})()
console.log(Lazy);

总结懒汉式和饿汉式的优缺点:懒汉式的加载慢,效率不高,但是资源利用率高;饿汉式的加载快,效率高,资源利用率不高。但都是设置了一个全局访问点,更加灵活地保证了实例的创建和访问约束。

好好学习,天天向上!冲冲冲!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值