我一直在查看一些 java 项目,并发现不同开发人员/项目之间存在这种不一致:
(请注意:对于下面的内容,只有一个 Edibles 永远存在,Edibles 永远不需要有两个 Activity 实例。)
项目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。
在文档中,一些使用edibles1的开发人员写道,它更安全吗?尽管也许他们只是想与他们的类保持一致,因为即使该项目只需要一种食物,但类似的类需要多个,因此需要 example1。
那么开发者可能只是想要一致性还是有更深层次的含义/理解?
最佳答案
项目 1 正在(部分)实现 Singleton design pattern 。我的部分意思是它应该有一个私有(private)构造函数,以便其他类只能通过静态 getEdibles()
方法访问单例。
仅当其他类需要访问 Singleton 类并与其交互(获取/设置值、调用方法等)时才需要 Singleton 设计模式
项目2没有实现Singleton DP。该 map 只能由 Edibles2
关于Java 实例化类以允许动态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51229614/