单例模式的三种写法
程序员文章站
2022-07-13 23:34:22
...
DCL
public class T{
private volatile static T t = null;
private T(){}
static{
if(t == null){
synchronized (T.class) {
if(t == null){
t = new T();
}
}
}
}
public static T getInstance(){
return t;
}
}
静态内部类
public class T{
private T(){}
private static class Singleton{
private static final Singleton instance = new Singleton();
}
public static Singleton getInstance(){
return Singleton.instance;
}
}
枚举
public class T{
public static void main(String[] args) {
TTT.getInstance().print();
TTT.getInstance().print();
}
}
class TTT{
public enum Singleton{
instance;
private Singleton(){
System.out.println("我是单例下的一个构造方法,只执行一次");
}
public void print(){
System.out.println("我是单例下的一个方法");
}
}
public static Singleton getInstance(){
return Singleton.instance;
}
}
输出结果:
我是单例下的一个构造方法,只执行一次
我是单例下的一个方法
我是单例下的一个方法值得注意是的:这里一般不将枚举直接暴露在外面,使用Singleton.instance.“()来调用单例下的方法。
比如如下写法就不合适,它违反了”职责单一原则”,他可以通过Singleton.instance.**直接调用。。。
public enum Singleton{
instance;
private Singleton(){
System.out.println("我是单例下的一个构造方法,只执行一次");
}
public void print(){
System.out.println("我是单例下的一个方法");
}
public static Singleton getInstance(){
return instance;
}
}
上一篇: 单例模式的三种写法
下一篇: 【转】单例模式的三种写法