1. 什么是Singleton?
Singleton,即单例,在Java中表示的是单例模式,所谓的单例模式,指的就是在程序中,有且仅有一个该实例对象。
单:唯一,单独。
例:实例对象。
2. 单例模式有几种创建方式?
2.1 饿汉式(在程序启动过程中,就开始创建实例对象,饿汉式是线程安全的,它的缺点是不管程序是否需要该实例都会创建)
2.1.1 直接创建实例对象(简介明了)
- 将构造方法私有化。
- 提供一个static修饰的常量对象。
package com.qingyun.demo.single.test;
import com.qingyun.demo.single.Singleton1;
/**
* Created with IntelliJ IDEA.
* User: 李敷斌.
* Date: 2020-05-11
* Time: 08:58
* Explain:
*/
public class TestSingleton1 {
public static void main(String[] args) {
Singleton1 singleton1=Singleton1.INSTANCE;
System.out.println(singleton1);
}
}
- 测试代码
public static void main(String[] args) {
Singleton1 singleton1=Singleton1.INSTANCE;
System.out.println(singleton1);
}
可以成功创建实例对象
2.1.2 通过枚举类的方式实现(最简洁的方式)
public class TestSingleton2 {
public static void main(String[] args) {
Singleton2 singleton2=Singleton2.INSTANCE;
System.out.println(singleton2);
}
}
2.1.2 通过静态代码块的方式实现
package com.qingyun.demo.single;
import java.io.IOException;
import java.util.Properties;
/**
* Created with IntelliJ IDEA.
* User: 李敷斌.
* Date: 2020-05-11
* Time: 08:59
* Explain: 单例模式-饿汉式(静态代码块方式)
*/
public class Singleton3 {
public static final Singleton3 INSTANCE;
public String info;
static{
//创建一个读取properties的实例对象
Properties properties=new Properties();
try {
properties.load(Singleton3.class.getClassLoader().getResourceAsStream("info.properties"));
INSTANCE=