Java实例化类允许动态字段

时间:2018-07-08 07:04:13

标签: java performance syntax instance instance-variables

我一直在研究一些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 个答案:

答案 0 :(得分:1)

项目1正在(部分)实现Singleton design pattern。我的意思是说,它应该具有私有的构造函数,以便其他类只能通过静态getEdibles()方法访问单例。

仅当其他类需要访问Singleton类并与之交互(获取/设置值,调用方法等)时,才需要Singleton设计模式

项目2没有实现Singleton DP。只有类Edibles2

的方法才能访问该地图