##准备实习日记
这是我准备实习的课程经历,记录的只是学习途中个人认为需要记录和新学习到的知识,所说的也全都是个人的理解,如有错误,欢迎指正讨论。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. 创建公有静态方法来返回第二步的静态属性