单例模式推荐的几种用法

单例模式

关键步骤:

  1. 私有静态单例对象
  2. 私有空参构造器
  3. 静态公有方法 getInstance()只为外部提供一个对象
  • 懒汉式初级版
public class Singleton {
    //懒汉式
    private static Singleton singleton;

    private Singleton() {}

    public static Singleton getSingleton(){
        if (singleton==null){
             singleton = new Singleton();
        }
        return singleton;
    }
}
  • 懒汉式线程安全
public class Singleton {
    //懒汉式线程安全
    private static Singleton singleton;

    private Singleton() {}

    public static synchronized Singleton getInstance(){
        if (singleton==null){
             singleton = new Singleton();
        }
        return singleton;
    }
}
  • 懒汉式线程安全效率双重检查
public class Singleton {
    //懒汉式线程安全效率版
    private static Singleton singleton;

    private Singleton() {}

    public static synchronized Singleton getInstance(){
        if (singleton==null){
            synchronized (Singleton.class){
                if (singleton==null){
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}
  • 饿汉式静态内部类
public class Singleton {
    //饿汉式静态内部类

    private Singleton() {}

    private static class SingletonInner{
        private static final Singleton INSTANCE = new Singleton();
    }
    public static Singleton getInstance(){
        return SingletonInner.INSTANCE;
    }
}
  • 枚举类...........

借助JDK1.5中添加的枚举来实现单例模式。不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象。

public enum Singleton{
    INSTANCE;
    public void whateverMethod(){

    }
}
posted @ 2022-11-14 17:22  郭培鑫同学  阅读(15)  评论(0编辑  收藏  举报