确保某一个类只有一个实例,并且自行实例化并向整个系统提供这个实例git
public class Singleton {
private static final Singleton singleton = new Singleton();
//构造函数私有化
private Singleton() {
}
//公有的静态函数,对外暴露获取单例对象的接口
public static Singleton getInstance() {
return singleton;
}
}
复制代码
public class Singleton {
private static Singleton singleton;
//构造函数私有化
private Singleton() {
}
//公有的静态函数,对外暴露获取单例对象的接口
public static synchronized Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}
复制代码
以上的2种模式用的都很少,了解一下就好,下面介绍平时用得比较多的单例模式github
public class Singleton {
private volatile static Singleton singleton = null;
//构造函数私有化
private Singleton() {
}
//公有的静态函数,对外暴露获取单例对象的接口
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
复制代码
public class Singleton {
private Singleton() {
}
public static Singleton getInstance() {
return SingletonHolder.sInstance;
}
//静态内部类
private static class SingletonHolder {
private static final Singleton sInstance = new Singleton();
}
}
复制代码
静态内部类单例模式和DCL模式是推荐的单例实现模式数据库
public enum Singleton {
INSTANCE;
}
复制代码
源码地址:https://github.com/snowdream1314/DesignPatternsExamples设计模式
欢迎关注个人微信公众号,和我一块儿学习一块儿成长! 安全