创建型模式之单例模式

来源:互联网 发布:手机excel软件 编辑:程序博客网 时间:2024/05/19 17:06

单例模式是创建型模式的一种,实现单例的类将构造方法私有化,对外提供唯一的实例。


饿汉模式

类被加载的时候即创建实例。因类加载是单线程的,故此方法是线程安全的。

public class Singleton {    private static final Singleton singleton = new Singleton();    private Singleton() {    }    public static Singleton getInstance() {        return singleton;    }}

懒汉模式

实例第一次被引用的时候才会被创建,需要考虑线程安全。

1. 双重校验锁。

public class Singleton {    private static Singleton singleton;    private Singleton() {    }    public static Singleton getInstance() {        //确保效率,避免频繁加锁        if(singleton == null) {            synchronized (Singleton.class) {                //确保线程安全,避免重复创建实例                if(singleton == null) {                    singleton = new Singleton();                }            }        }        return singleton;    }}

2. 静态内部类。

内部类并不归属于外部类一起加载,内部类在被引用时才会被加载,即所谓懒汉。
如饿汉模式所述,类加载是线程安全的。

public class Singleton {    private static class SingletonCreator {        private static final Singleton singleton = new Singleton();    }    private Singleton() {    }    public static Singleton getInstance() {        return SingletonCreator.singleton;    }}

枚举模式

枚举从Java 1.5开始被引入,这是一种最简洁有效的单例实现途径。
枚举的特性确保了实例创建的线程安全,且避免实例反序列化时创建新的实例。

public enum Singleton{    INSTANCE;    public String otherField;    public void otherMethod() {    }}
原创粉丝点击