设计模式——单例模式

本文介绍了设计模式中的单例模式,解释了单例模式的概念和作用,如保证系统中某类只有一个实例,减少内存开销和性能损耗。文章详细阐述了如何在Java和JavaScript中实现单例模式,包括使用闭包和ES6 Class。此外,还讨论了单例模式的优缺点,并提到了在Vue中应用单例模式的例子。最后,作者分享了关于ES6中Symbol类型的思考,并推荐了几本设计模式的相关书籍。
摘要由CSDN通过智能技术生成


前言

学习了这么长的时间,设计模式却还是浅尝辄止,而且最近在回顾Vue知识的时候,发现了很多常见的设计模式:观察者啊,单例啊什么的。让我意识到,如果想要去读懂Vue底层的话,设计模式的思想是必不可少的。

虽然是在学前端,但是准备通过java来学习设计模式,因为毕竟java是一个强类型的语言,通过java能更直观的去学习设计模式的思想。同时也会尽量去将设计模式通过JavaScript的方式实现出来。

什么是单例模式

字面上来看,就是只有一个实例的模式。简单来说,单例模式就是在整个系统中,保持一个实例,不生成新实例的模式。当然并不是说仅仅只能new一个对象出来,而是说,针对某个特殊的对象,我们在第一次将它实例化后,以后再次访问时,访问到的一直都是之前实例化好的特殊对象

为什么需要单例模式

正如上面说的那样,单例模式针对的是某些特殊的对象,那么该对象为什么被针对呢?

需要单例模式实现的对象系统,一般具有如下特点

对象

  • 需要频繁的被创建、销毁,但在这些过程中无法优化
  • 需要比较多的资源:读取配置、产生其他依赖对象

环境

  • 希望节省内存
  • 希望节省系统性能的开销
  • 希望某些资源不被多重占用
  • 希望有一个能够统一处理资源和优化的对象

VuexSpring中的Bean对象就是如此

通过单例模式,我们能够简单的实现节省性能开销、节省内存、统一管理资源等功能。因为只有一个实例对象存在,并不会新生成。

如何实现单例模式

单例模式的实现要点

  • 保证对象只有一个,不能生成新对象出来

java

以new运算符为例。new本质上是调用了该对象的构造方法。
所以,我们可以通过私有化其构造方法,防止别的地方重新创建该类的实例对象。
同时,在该类内部自己创建自己的实例对象,向外界暴露一个访问的方法即可。
这样我们就能保证该对象只有一个,同时不会生成新对象出来。

public class Singleton {
   
	// 初始化对象,通过static修饰符防止栈溢出(常量池)
	private static final Singleton singleton = new Singleton();
	
	// 限制产生多个对象
	private Singleton() {
   
    };
	
	// 向外界暴露访问singleton的方法
	public static Singleton getSingleton(){
   
		return singleton;
	}
}

JavaScript

实现的条件还是不变,保证对象只有一个,不能生成新对象出来。
在java中,我们通过private防止产生了多个对象。
在JavaScript中,如果要实现私有化,首先想到的就是闭包了,闭包还能够使该实例不消失。
其次结合if判断语句,如果实例存在,直接返回,不存在就执行new运算符初始化实例。

闭包实现

let SingleCase = (function Singleton (){
   
	let instance = null
	function _init(){
   
		// 此处可以定义一些初始化配置
	}
	return function(){
   
		console.log
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值