单例模式(超级详细)

目录:
一 单例模式的定义
二 单例模式的实现步骤的描述和代码实现+优缺点
一 单例模式的定义
数学与逻辑学中,singleton定义为“”“有且仅有一个元素的集合”。
JAVA单例模式定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供。
JAVA单例模式的目的:使得一个对象成为系统中的唯一实例。
二代码实现的要点
1.一个类只能有一个实例
2.它必须自行创建这个实例
3.他必须向整个系统提供这个实例
实现方式:
1.懒汉式(推荐 双锁)------最基础的实现方式 线程上下文单例
/**

  • 双重锁懒汉式:对象需要被使用时才创建,这样既可以节约内存空间 又可以保证线程安全
  • 缺点:但是由于jvm存在乱排序执行功能,偶尔也会出现线程不安全
  • 解决方法:可以通过添加volitatle字在内存中读取

*/
public class Singleton1 {
private volatile static Singleton1 instance=null;
private Singleton1() {}//把构造方法声明为私有 是为了保证不通过new 的方式创建
public static Singleton1 getInstance() {
if(instancenull) {
synchronized(Singleton1.class) {
if(instance
null) {
instance=new Singleton1();
}
}
}
return instance;

}
}

2.饿汉式-----类加载时创建
public class Singleton {
private static final Singleton singleton=new Singleton();//
//把构造方法声明为私有是为了保证不通过new 的方式创建对象
private Singleton() {}

public Singleton getInstance() {
return singleton;

}
}

3.枚举式(强烈推荐)
**

  • 优点:代码简单 实现单例模式最佳的方法
  • 缺点:序列化问题(序列化后前后两个对象不等)

/
public enum Singleton2 {
INSTANCE;
public void method() {}
}
4.静态内部类
/
*

  • 静态内部类的优点:外部加载时不需要立即加载内部类,故不占用内存
  • 这种方法不仅能实现线程安全性 而且能保证单例的唯一性 同时也延迟了单例的实例化

*/
public class Singleton3 {
public static class SingletonHolder{
private static final Singleton3 instance=new Singleton3();
private SingletonHolder() {}
public static Singleton3 getInstance() {
return SingletonHolder.instance;
}
}
}

发布了10 篇原创文章 · 获赞 3 · 访问量 575

猜你喜欢

转载自blog.csdn.net/qq_43614498/article/details/104899755