我一直在研究一些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。
那么开发人员可能只是想要一致性,还是有更深的含义/理解?
答案 0 :(得分:1)
项目1正在(部分)实现Singleton design pattern。我的意思是说,它应该具有私有的构造函数,以便其他类只能通过静态getEdibles()
方法访问单例。
仅当其他类需要访问Singleton类并与之交互(获取/设置值,调用方法等)时,才需要Singleton设计模式
项目2没有实现Singleton DP。只有类Edibles2