单例模式推荐的几种用法

单例模式

关键步骤:

  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 @   gdxstart  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示