枚举enum和静态代码块的特性相似,在使用枚举类时,构造方法会被自动调用,
也可以应用这个特性实现单例模式。
package test;
public class MyObject {
private enum MyEnumSingleton{
INSTANCE;
private Resource resource;
private MyEnumSingleton(){
resource = new Resource();
}
public Resource getResource(){
return resource;
}
}
public static Resource getResource(){
return MyEnumSingleton.INSTANCE.getResource();
}
}
如上图,外部只能通过myobject的getResource来获得resource对象,再没有其他途径。
因为枚举变量是static final的,所以如果不是定义时声明,那只能在构造方法中实例化,并且有且只能实例化一次。
所以保证了resource对象的单例性。
看一段测试代码:
import test.MyObject;
public class Run {
class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(MyObject.getResource().hashCode());
}
}
}
public static void main(String[] args) {
Run.MyThread t1 = new Run().new MyThread();
Run.MyThread t2 = new Run().new MyThread();
Run.MyThread t3 = new Run().new MyThread();
t1.start();
t2.start();
t3.start();
}
}
zengrenmeigui
最后
以上就是霸气御姐最近收集整理的关于单例模式之使用enum枚举数据类型实现的全部内容,更多相关单例模式之使用enum枚举数据类型实现内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复