【问题标题】:Java: creating several instances of object in class itself or how to restructureJava:在类本身中创建多个对象实例或如何重组
【发布时间】:2015-04-30 07:31:51
【问题描述】:

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

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)");

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

很高兴有任何建议,在此先感谢 :)

【问题讨论】:

  • 你不应该初始化类中的属性,而应该有多个构造函数/甚至方法来初始化它们。其次,有一个使用所有属性构造地图并返回地图的方法。这些方法可以稍后在其他类中重用。
  • 如果成分的数量是固定的,那么你也可以使用枚举。
  • 绝对是一个单独的类。理想情况下是文本文件中的实际数据,而不是 Java 源代码中的数据。
  • 恕我直言,地图 是多余的,因为它的成分信息存储在成分中。你可能有一个类,比如说 Receipt,它有一个字段 List 存储所有成分。您可以通过迭代器获取名称。
  • 由于AllIngredients 看起来像容器,它不能是Ingredients 的超(或子)类。例如,它可以是 Map 的纯包装器,带有用于放置和检索内容的实用方法。

标签: java class object structure


【解决方案1】:

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

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

关于你的情况。

  1. 如果预先确定的值根据数据的敏感性将值存储在文本文件、属性文件、数据库、类中的常量等中。
  2. 使用构造函数创建成分类
  3. 创建一个类,该类将具有使用预定值初始化成分类的方法,如果需要更新值,将值保存到文本文件 - 数据库等,在您的情况下返回为映射。

还可以查看下面的链接

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

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

【讨论】:

    【解决方案2】:

    听起来你在寻找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)"));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-04
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多