我希望拥有具有一系列属性和一个唯一标识键的对象。因为键是唯一的,所以它可以用来挑选一组特定的属性。我希望能够在实例化对象时使用键,以便与该键关联的属性成为该对象的属性。
属性规范将是规则的(也就是说,如果一个键有一个名为description的属性,那么每个其他键也是如此)。
一个不好的例子
这个例子是我最初试图解决这个问题的方法,而且是不够的。我在这里张贴它是为了说明这种方法的问题。
我可以有一个有名字和描述属性的食物类。在这种情况下,名称应该是唯一的密钥,在这种情况下,只是一个描述。
public class Food {
private String name;
private String description;
public Food(String name, String description) {
this.name = name;
this.description = description;
}
}这种方法的问题
首先,每当我制作一种特定的食物,比如比萨饼,我每次都要输入同样的描述,比如“一种受欢迎的意大利菜”。我想要的是能够创建一个只知道食物名称的对象,然后为我填充其余的属性。换句话说,我应该能够传递披萨,对象将被创建一个适当的描述。
其次,这个示例不能保证name属性的唯一性。我可以制作一个比萨饼,上面写着“一种受欢迎的意大利菜”,另一种描述是“奶酪的美味!”但是,我希望名称能够唯一地选择一组属性。当然,一个属性可以属于多个键(比萨饼和意大利面都可以有“意大利菜”的描述),但是键只能有一个特定的描述。
潜在解决方案
我想这至少需要两件事:
。
发布于 2011-04-08 00:40:54
Map是存储预定义属性的良好数据结构。但是您需要一个将属性复制到对象的代码,即调用代码,如下所示:
food.setDescription(attrs.get("description"))
此代码可以在工厂中编写。工厂不一定要创建不同类的实例。它可以创建同一个类的实例并启动它们。
其他方法是使用名为template对象的模式。这意味着您可以创建多个对象,如比萨饼、意大利面、木桩、汤等,这些对象的属性已经预先定义好了。然后,当您需要创建另一个比萨饼时,首先创建一个已经存在的比萨饼的副本,然后对其进行修改,使其成为您的特定比萨饼。java中创建现有对象副本的方法有多种:复制构造函数、克隆、序列化等。
发布于 2011-04-08 00:32:46
我同意hashmap是理想的,我推荐的是某种mapper实用类,它可以从xml文件或数据库中获取您的名称和描述,然后将它们插入到哈希映射中。这就是你的hashmap住的地方。然后,您可以使用工厂来构造您的食物对象,并从hashmap注入名称和描述依赖项。
发布于 2011-04-08 00:33:58
您需要一个工厂和一些重载的构造器。
public class Food {
private static final String DEFAULT_DESCRIPTION = "My favorite!";
private String name;
private String description;
public Food(String name) {
this(name, DEFAULT_DESCRIPTION);
}
public Food(String name, String description) {
this.name = name;
this.description = description;
}
}
class Pizza extends Food {
private static final String DEFAULT_DESCRIPTION = "A popular Italian dish";
public Pizza(String name)
{
super(name, Pizza.DEFAULT_DESCRIPTION);
}
public Pizza(String name, String description) {
super(name, description);
}
}
public class FoodFactory {
private static final FoodFactory instance = new FoodFactory();
private FoodFactory() {}
public static FoodFactory getInstance() { retun this.instance; }
public Food create(String name, String description) {
// Here's where you can create different kinds of food based on your requirements
}
}https://stackoverflow.com/questions/5589123
复制相似问题