写一个单例类,对于很多初学者 Java 的人来说算是基本功吧,看到很多的面试题都会有写一个单例类的题目。
相信单例类在后面的很多地方会用到(一个还未入职的 JAVA 学习者)
本人在一个 Java 学习视频中看到写单例类的四种方式,现在搬到这里来学习下
一、首先是一种简单的常规的方式,但是这种写法在多线程执行情况下可能产生多个实例
package singleton;
//简单方式:在并发过程中可能存在多个实例
public class SingletonDemo1 {
private static SingletonDemo1 INSTANCE;
private SingletonDemo1(){}
public static SingletonDemo1 getInstance(){
if(INSTANCE == null){
INSTANCE = new SingletonDemo1();
}
return INSTANCE;
}
}
package singleton;
//公共域方式:简单
public class SingletonDemo2 {
public static final SingletonDemo2 INSTANCE = new SingletonDemo2();
private SingletonDemo2(){}
}
三、第三种方法是利用了工厂模式,可以在其中的方法中加入自己的要求、特点
package singleton;
//工厂化方法:可以在实例过程中添加逻辑
public class SingletonDemo3 {
private static SingletonDemo3 INSTANCE = new SingletonDemo3();
private SingletonDemo3(){}
public static SingletonDemo3 getInstance(){
return INSTANCE;
}
}
四、第四种方法是利用了枚举方式,据说是最简单的。只要四个单词
package singleton;
//枚举方式:最佳实践 推荐
public enum SingletonDemo4 {
INSTANCE;
public static void output(String s){ //用于测试写的一个方法
System.out.println("Hello, " + s);
}
}
最后,下面是一个测试类
package singleton;
public class SingletonTest {
public static void main(String[] args) {
System.out.println("SingletonDemo1: " + SingletonDemo1.getInstance());
System.out.println("SingletonDemo1: " + SingletonDemo1.getInstance());
System.out.println("SingletonDemo2: " + SingletonDemo2.INSTANCE);
System.out.println("SingletonDemo2: " + SingletonDemo2.INSTANCE);
System.out.println("SingletonDemo3: " + SingletonDemo3.getInstance());
System.out.println("SingletonDemo3: " + SingletonDemo3.getInstance());
System.out.println("SingletonDemo4: " + SingletonDemo4.INSTANCE);
System.out.println("SingletonDemo4: " + SingletonDemo4.INSTANCE);
SingletonDemo4.INSTANCE.output("Boy");
}
}
以上就是四种单例类的写法了,具体写哪种还是根据具体要求选择更合适的吧
本文介绍了Java中创建单例类的四种常见方式,包括简单常规方法及其在多线程环境下的问题,旨在帮助Java初学者理解和掌握单例模式的应用。

1049

被折叠的 条评论
为什么被折叠?



