设计模式复习-自用
一、 单例模式
什么是单例模式
一种设计模式,确保一个类只有一个实例,并提供一个全局访问点来获取该实例
为什么需要单例模式
在我们的项目开发中,对于一些类的实例对象我们全局只要一个就足够了。在这种情况下,我们需要保证在全局中这个类不会被重复创建,始终只有一个。无论我们何时何地访问它,得到的都是同一个实例。
这种设计模式就是单例模式。
怎么实现单例模式 八种方法
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; }#学习##面经##秋招##实习##牛客创作赏金赛#