【问题标题】:Data set for storing objects in javajava中存储对象的数据集
【发布时间】:2011-07-01 18:49:10
【问题描述】:
假设我有多个要存储的对象:
Person ------------ Employee ------------ Sales Engineer
| |
Customer Field Engineer
所以:人、客户、员工、销售工程师、现场工程师。
我需要跟踪所有这些...存储它们的最佳方式是什么?在 ArrayList 中?自定义 ArrayList?
它们的存储方式也可能会影响未来的扩展 - 将来,这些对象可能由 SQL Server 中的字段生成。 (另外,这是一个 Android 应用程序 - 所以这可能是一个因素。)
【问题讨论】:
标签:
java
android
object
data-structures
【解决方案1】:
您需要List<Person>。您的图表建议继承,因此您需要拥有一个超类的集合,并让多态性完成其余的工作。
您的代码可以做到这一点:
List<Person> people = new ArrayList<Person>();
// Any class that extends person can be added
people.add(new Customer());
people.add(new FieldEngineer());
for (Person person : people) {
System.out.println(person);
}
您的设计不允许工程师成为客户,或销售工程师进入现场,但在像您这样的情况下,这是继承的诅咒。
如果您需要灵活性,更好的设计可能是保留 Person 类并以装饰器方式为 Person 分配角色。
装饰器会使用组合而不是继承来添加行为,如下所示:
public class Customer {
private Person person;
public Customer(Person p) { this.person = p; }
public void buyIt() { // do something customer like here }
}
public class FieldEngineer {
private Person person;
public FieldEngineer(Person p) { this.person = p; }
public void fixIt() { // do something field engineer like here }
}
【解决方案2】:
使用异构列表——在 java 中你可以使用像这样的泛型List <Person>
【解决方案3】:
如果您不确定将来需要如何访问对象,您可能会发现HashTable Person> 提供了很大程度的灵活性。
由于它使用键值对,您可以快速检索特定对象,如果您认为有必要,.keys() 方法提供了一种迭代遍历整个集合的方法。
【解决方案4】:
我假设所有对象都是集合的一部分?
理想情况下,Person 应该有一个 get/setCustomer,Employee 应该有一个 get/setFieldEngineer,然后结构应该是这样的:
class CustomerRelationship{
public Employee employee;
public SalesEngineer salesEngineer;
public Person customer;
}
如果对象不是集合的一部分,而是对象列表,那么您可能需要重新考虑您的设计。或者您可以在任何地方使用 instanceof(不好)。