关于枚举单例模式+策略模式的使用
来源:13-13 单例模式3

波粒二象性max
2020-05-11
老师您好,想请教个问题,就是我想写个一个接口多个实现,然后这个实现在被调用的时候初始化一次,每个实例里面可能有不同的数据库mapper,老师帮我看看,这样写是否有问题。
- Test一个接口,两个实现:Test1、Test2
- Singleton8枚举单例
- SpringUtils获取spring bean的工具类
public enum Singleton8 {
INSTANCE;
private Map<String, Test> map = new HashMap<>();
Singleton8() {
Test test1 = SpringUtils.getBean(Test1.class);
Test test2 = SpringUtils.getBean(Test2.class);
map.put("a", test1);
map.put("b", test2);
}
public Test get(String key) {
return map.get(key);
}
}
public interface Test {
void print();
}
public class Test1 implements Test{
@Override
public void print() {
System.out.println("1");
}
}
public class Test2 implements Test{
@Override
public void print() {
System.out.println("2");
}
}
主要是有以下疑惑
- Singleton8() {…} 这个构造方法的初始化是不是由jvm保证了它里面代码的线程安全
- 这个map如果有高并发的get,是不是就不能保证获取到的实现类是我需要的那个实现类了,要换成ConcurrentHashMap,
- 或则说这种写法就是不对的。。
写回答
1回答
-
是
如果只是get,那就是安全的
10
相似问题