例如,我有两个类:Book和Customer。客户有一个列表,其中包含所购买的所有图书。通过这种设计,我可以轻松查找客户的购买历史记录。
但是,如果我想知道有多少客户购买了特定图书,通常我会查看所有客户的购买历史记录并获取购买此特定图书的人。这可能是一个耗时的查找过程。我想知道在Book类中添加List是否更好的方法,并将购买此特定书籍的所有客户添加到此列表中。
我想知道我的方法在设计方面是否会更好/更差。这肯定会使Book-Customer强烈耦合,但我不确定是否有其他方法可以实现这种方法。
答案 0 :(得分:0)
即使是参考书籍清单的顾客班也不是那么好。
让客户和图书课程彼此不了解。而是维护地图以供您快速参考。例如 -
Map<Customer, List<Book>> customerToBooks;
Map<Book, List<Customer>> bookToCustomers;
通过assignBook(Customer c, Book b)
和returnBook(Customer c, Book b)
方法操作这些地图
答案 1 :(得分:0)
您可以做的一件事是检查客户班级内的清单,检查图书购买历史记录,如下所示:
Customer.java
public class Customer{
public Set<Book> purchases = new HashSet<Book>();
public void purchaseBook(Book b){
purchases.add(b);
}
}
原班级:
public Set<Customer> customers = new HashSet<Customer>();
public Set<Customer> getCustomersFromBook(Book b){
Set<Customer> ret = new HashSet<Customer>();
for(Customer c : customers){
if(c.purchases.contains(b)){
ret.add(c);
}
}
return ret;
}
或者你可以做同样的事情,但Set
类Book
内的客户。
答案 2 :(得分:0)
理想情况下,要保持纯洁,书籍和顾客都不应该彼此了解。我会创建第三个类,购买,包含对客户和书籍的引用,订购日期,发货日期,支付价格等。
然后我会有一个Map<Customer, List<Purchase>>
和一个Map<Book, List<Purchase>>
。