1.什么是单例
单例就是让整个程序在运行过程中只有一个该类的对象。在一些连接类和其他不需要多对象的程序中,可以节约内存。
一般有三个步骤
1.私有化构造方法
2.提供获取对象的方法
2.单例实现方式
2.1最简单方式
public class TestSingleton {
private TestSingleton() {
}
private static TestSingleton instance = new TestSingleton();
public static TestSingleton getInstance() {
return instance;
}
}
2.2改进方式(有其他程序调用才加载)
public class TestSingleton3 {
private static TestSingleton3 instance;
private TestSingleton3() {
}
static TestSingleton3 getTestSingleton() {
if (instance == null) {
synchronized (TestSingleton3.class) {
if (instance == null) {
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
instance = new TestSingleton3();
}
}
}
return instance;
}
}
双重检查的目的:
2.3内部类的方式
public class TestSingleton4 {
private TestSingleton4() {
}
static TestSingleton4 getTestSingleton() {
return innerClass.testSingleton4;
}
private static class innerClass {
final static TestSingleton4 testSingleton4 = new TestSingleton4();
}
}
2.4枚举方式
public enum TestSingleton5 {
INATANCE;
public static void main(String[] args) {
TestSingleton5 instance1 = TestSingleton5.INATANCE;
TestSingleton5 instance2 = TestSingleton5.INATANCE;
System.out.println(instance1 == instance2);
}
}