设计模式复习-自用

一、 单例模式

什么是单例模式

一种设计模式,确保一个类只有一个实例,并提供一个全局访问点来获取该实例

为什么需要单例模式

在我们的项目开发中,对于一些类的实例对象我们全局只要一个就足够了。在这种情况下,我们需要保证在全局中这个类不会被重复创建,始终只有一个。无论我们何时何地访问它,得到的都是同一个实例。

这种设计模式就是单例模式。

怎么实现单例模式 八种方法

1.饿汉式-静态变量方式

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

    public static Singleton getInstance(){
        return singleton;
    }
}

2.饿汉式-静态代码块方式

public class Singleton {
    private Singleton(){}
    private static Singleton singleton;

    static {
        singleton=new Singleton();
    }

    public static Singleton getInstance(){
        return singleton;
    }
}

3.懒汉式-线程不安全

public class Singleton {
    private Singleton(){}
    private static Singleton singleton;

    public static Singleton getInstance(){
        if(singleton==null){
            singleton=new Singleton();
        }
        return singleton;
    }
}

4.懒汉式-线程安全-但低效

public class Singleton {
    private Singleton(){}
    private static Singleton singleton;

    public static synchronized Singleton getInstance(){
        if(singleton==null){
            singleton=new Singleton();
        }
        return singleton;
    }
}

5.懒汉式-双重检查锁-第一版

public class Singleton {
    private Singleton(){}
    private static Singleton singleton;

    public static Singleton getInstance(){
        if(singleton==null){
            // 第一次 是为了 避免不必要的锁竞争。
            // 如果实例已存在(instance != null),线程直接返回已创建的对象,无需进入同步块,大幅提升性能。
            synchronized(Singleton.class){
                if(singleton==null){  // 第二次检查 目的是防止重复创建对象。
                    singleton=new Singleton();
                }
            }
        }
        return singleton;
    }
}

6..懒汉式-双重检查锁-第二版

public class Singleton {
    private Singleton(){}
    private static volatile Singleton singleton;

    public static Singleton getInstance(){
        if(singleton==null){
            // 第一次 是为了 避免不必要的锁竞争。
            // 如果实例已存在(instance != null),线程直接返回已创建的对象,无需进入同步块,大幅提升性能。
            synchronized(Singleton.class){
                if(singleton==null){  // 第二次检查 目的是防止重复创建对象。
                    singleton=new Singleton();
                }
            }
        }
        return singleton;
    }
}

7.懒汉式-静态内部类方式

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

    public static Singleton getInstance(){
        return SingletonHolder.singleton;
    }
}

8.枚举方式

 public enum Singleton{
       INSTANCE;
 }

#学习##面经##秋招##实习##牛客创作赏金赛#
全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
3
分享

创作者周榜

更多
牛客网
牛客企业服务