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