Java:在 class 本身中创建多个对象实例或如何重组

Java: creating several instances of object in class itself or how to restructure

我是 java 初学者,有一个关于如何最好地构建烹饪程序的问题。 我有一个名为 Ingredient 的 class,这个 class 目前看起来像这样:

public class Ingredient {

    private String identifier;
    private double ingredientFactor;
    private String titleInterface;

    public Ingredient(String identifier, double ingredientFactor,String titleInterface) {
        this.identifier = identifier;
        this.ingredientFactor = ingredientFactor;
        this.titleInterface = titleInterface;
    }

我想用某些值作为实例变量初始化几个对象(大约40个)并将它们保存在一个Map中,例如

Map<String, Ingredient> allIngredients = new HashMap<String, Ingredient>();
allIngredients.put("Almonds (ground)", new Ingredient("Almonds (ground)", 0.7185, "Almonds (ground)");

稍后我想在不同的 class 中以 Map/HashMap 的形式检索所有这些对象。 我不确定如何最好地进行,在 Ingredient class 本身中初始化所有这些对象,或者提供一个初始化它的方法,或者创建一个 super class (AllIngredients 或类似的东西)会更好?)有一个以成分作为实例变量的地图?

很高兴提出任何建议,提前致谢:)

请不要在 Ingredient class 本身中初始化所有这些对象。这对 oops 来说是一个不好的做法。

想想你的 class 是一个模板,你可以从中创建具有不同属性值的副本(对象)。在现实世界中,如果您的 class 代表玩具飞机的模型,您将使用它来创建多个玩具飞机,但每个玩具飞机都有不同的名称和颜色,那么请考虑如何设计这样的系统。您将拥有一个模型(class)。然后是一个系统(另一个 class),用于从不同的颜色和名称选择中获取所需的颜色和名称(例如在数据库、文件、属性 文件中)等

关于你的情况。

  1. 如果预先确定的值将值存储在文本文件、属性文件、数据库、class 中的常量等中,具体取决于数据的敏感性。
  2. 使用构造函数创建成分class
  3. 创建一个class,它将具有使用预定值初始化成分class的方法,如果需要更新值,将值保存到文本文件-数据库等,在你的情况下return 作为地图 .

另请查看以下链接

http://www.tutorialspoint.com/design_pattern/data_access_object_pattern.htm

http://www.oracle.com/technetwork/java/dataaccessobject-138824.html

我觉得你在找 static Map

public class Ingredient {

    private String identifier;
    private double ingredientFactor;
    private String titleInterface;

    public Ingredient(String identifier, double ingredientFactor, String titleInterface) {
        this.identifier = identifier;
        this.ingredientFactor = ingredientFactor;
        this.titleInterface = titleInterface;
    }

    static Map<String, Ingredient> allIngredients = new HashMap<String, Ingredient>();

    static {
        // Build my main set.
        allIngredients.put("Almonds (ground)", new Ingredient("Almonds (ground)", 0.7185, "Almonds (ground)"));
    }
}