我一直在研究一些Java项目,并发现不同的开发人员/项目之间存在这种不一致:
(请注意:对于以下情况,将永远只存在一个Edible,而不再需要Edibles具有两个活动实例。)
项目1:
public class Edibles1 {
private final HashMap<Integer, Food> edibleFoods = new HashMap<>();
private static final Edibles edibles = new Edibles();
public static Edibles getEdibles() {
return edibles;
}
//external usage for this project:
public static void main(String[] args) {
Food foodForId = Edibles.getEdibles().edibleFoods.get(123);
System.out.println(foodForId);
}
}
专案2:
public class Edibles2 {
private static final HashMap<Integer, Food> edibleFoods = new HashMap<>();
//external usage for this project:
public static void main(String[] args) {
Food foodForId = Edibles.edibleFoods.get(123);
System.out.println(foodForId);
}
}
请记住,该项目只需要一个Edibles#edibleFoods。
在文档中,一些使用foods1的开发人员写道,这样做更安全吗?尽管也许他们只是想与他们的班级保持一致,因为即使该项目只需要一个Edibles,但相似的班级却需要多个,因此需要example1。
那么是开发人员只是想要一致性,还是有更深层的含义/理解?
最佳答案
项目1正在(部分地)实现Singleton design pattern。我的意思是说它应该有一个私有的构造函数,以便其他类只能通过静态getEdibles()
方法访问单例。
仅当其他类需要访问Singleton类并与其进行交互(获取/设置值,调用方法等)时,才需要Singleton设计模式。
项目2未实现Singleton DP。该地图只能由Edibles2
类的方法访问
关于java - Java实例化类以允许动态字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51229614/