一、单例模式
一般有八种写法,这里简单记录一下思路,首先单例需要构造器是private,然后一般有个static方法获得这个类的实例。
饿汉式:
所谓饿汉式其实应该是相对于懒汉式,懒汉式就是当你用到这个类的时候,才初始化实例并给你,所以这个饿汉式就是在类加载的时候就初始化了这个对象,所以有两种方法,一种是
private final static Singleton INSTANCE = new Singleton(); public static Singleton getInstance(){ return INSTANCE; }
还有就是利用static块,
private static Singleton instance; static { instance = new Singleton(); } public static Singleton getInstance() { return instance; }
懒汉就是要用到的时候,才去初始化或者说new这个对象。
这就有线程安全的问题了,所以懒汉这里有
线程不安全的情况;
线程安全getInstance同步方法的情况;
采用同步块,只判断一次instance==null所以还是线程不安全的情况;
采用同步块但双重检查的情况;
然后还有两种分别是静态内部类和枚举的写法。
静态内部类:
public class Singleton { private Singleton() {} private static class SingletonInstance { private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonInstance.INSTANCE; } }