我一直在研究一些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/

10-11 20:22