【JAVA】单例模式——2022.1.14准备实习日记

##准备实习日记
这是我准备实习的课程经历,记录的只是学习途中个人认为需要记录和新学习到的知识,所说的也全都是个人的理解,如有错误,欢迎指正讨论。JAVA基础课程是我学习的地方。
2022.01.14 JAVA基础——单例模式



前言

单例模式的意思是在类的实例化过程中,整个项目中有些类只允许存在一个实例,而不能随意的构造对象。这要求对象的构造和访问都具有相当程度的保护性和隐私性。所以就有了单例的概念。


一、单例模式

单例模式也称为 Singleton模式,是说一个类,在一个JVM里,只存在一个实例。

二、单例模式的使用方法

1.饿汉式单例模式

首先要私有化构造函数,使得外部不能创建实例。然后在类中私有化一个静态属性,让此静态属性指向一个该类的实例(使用私有构造函数)。再后,提供一个公有的静态方法,返回此静态属性。如此可以在外部调用该静态方法,得到唯一的该类的实例。

代码如下(示例):

public class Singleton {
    //私有化构造方法,使得该类无法在外部通过new进行实例化
	private Singleton(){}

	//提供一个静态属性,指向一个实例。 静态属性是唯一的
	private static Singleton instance = new Singleton();
	
	//public static 方法,可在外部调用该方法取得唯一实例
	public static Singleton getInstance(){
		return instance;
	}	
}

2.懒汉式单例模式

首先要私有化构造函数,使得外部不能创建实例。然后在类中私有化一个静态属性,此时该静态属性指向null(与饿汉式不同)。再后,提供一个公有的静态方法,创建实例并让静态属性指向该实例,后返回此静态属性。如此可以在外部调用该静态方法,得到唯一的该类的实例。

代码如下(示例):

public class Singleton {
    //私有化构造方法,使得该类无法在外部通过new进行实例化
	private Singleton(){}

	//提供一个静态属性,不指向实例。 静态属性是唯一的
	private static Singleton instance;
	
	//public static 方法,首先要创建实例。
	//可在外部调用该方法取得唯一实例,并只有在调用时才创建实例
	public static Singleton getInstance(){
	    //第一次访问的时候,instance没有指向任何对象,需要实例化一个对象
        if(instance==null){
            instance = new Singleton();
        }
		return instance;
	}	
}

三、单例模式的使用时机

饿汉式是立即加载,无论接下来是否需要用到这个对象,都会加载。该模式会把初始化时间集中,如果对象不需使用,会占用资源。
如果在构造方法里写了性能消耗较大,占时较久的代码,比如建立与数据库的连接,那么就会在启动的时候感觉稍微有些卡顿。

懒汉式是延迟加载,只有使用该对象的时候才会加载。 并且有线程安全的考量。该模式把初始化时间分散,只有当使用对象时,才分配资源。
使用懒汉式,在启动的时候,会感觉到比饿汉式略快,因为并没有做对象的实例化。 但是在第一次调用的时候,会进行实例化操作,感觉上就略慢。

如果业务上允许有比较充分的启动和初始化时间,就使用饿汉式,否则就使用懒汉式。

四、单例模式的三要素

1. 构造方法私有化
2. 静态属性指向实例
3. 创建公有静态方法来返回第二步的静态属性


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值