单例模式
单例模式是最简单的设计模式之一,单例模式是为了保证一个类只有一个实例,并且提供访问它的全局访问点。
懒汉式单例
public class Singleton {
private static Singleton instance;
private Singleton(){}
public static Singleton getInstance() {
if (instance == null ){
instance = new Singleton();
}
return instance;
}
}
这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程,可以通过加锁支持多线程。
// 线程安全懒汉式单例
public static synchronized Singleton getInstance() {
if (instance ==null ){
instance = new Singleton();
}
return instance;
}
饿汉式单例
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance() {
return instance;
}
}
这种方式比较常用,但容易产生垃圾对象。
双重锁校验
public class Singleton {
private volatile static Singleton singleton;
private Singleton(){}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
静态内部类
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
枚举
public enum Singleton {
INSTANCE;
public void haha() {//可自定义
System.out.println("hahaha");
}
}
调用只需要直接调用INSTANCE即可;
public static void main(String[] args) {
Singleton instance = Singleton.INSTANCE;
instance.haha();
}