2016-04-14 54 views
0

Örneğin, iki sınıfım var: Kitap ve Müşteri. Müşteri, satın aldığı tüm kitapları içeren bir listeye sahiptir. Bu tasarımla bir Müşterinin satın alma geçmişini kolayca görebilirim. AncakBir nesne başka hangi nesnelere sahip olduğunu biliyor mu?

, ben belirli bir Kitap satın almış kaç Müşteriler bilmek istiyorsanız, genelde ben bütün müşteriler satın alma geçmişini aramak ve bu belirli Kitabı satın alanların tanınacak. Bu zaman alıcı bir süreç olabilir. Kitap sınıfında bir Liste eklemek ve bu kitabı satın alan tüm Müşterileri bu Listeye eklemek daha iyi bir yaklaşım olup olmayacağını merak ediyorum. yaklaşımım tasarım açısından kötü/daha iyi olurdu

merak ediyorum. Bu kesinlikle Kitap-Müşteri'yi güçlü bir şekilde bir araya getirmektedir, ancak bu yöntemi uygulamak için başka yollar olup olmadığından emin değilim. kitapların listesine

+3

Kitap listesi ve kitapçıya ait olanı satın aldı, kitaba değil. –

+0

her kitap için bir sayacın ayarlanmış olması mümkün, yani, Kitap A'nın 5 kopyasında ve bir önyükleme yapan her müşteri için sayımı çıkarırsınız? Bu sayede toplam 5 kitapla, 3 tanesi ise 2 tane kaldı. Bu aynı zamanda – XaolingBao

cevap

1

İdeal olarak, saf olmak, kitap ne de müşteri ne birbirlerini tanımalı. Bunun yerine, müşteri ve kitabın referanslarını, siparişi verilen tarihi, gönderildiği tarihi, ödenen fiyatı, vb. Içeren üçüncü bir sınıf, Satın Alma, yerine bir Map<Customer, List<Purchase>> ve isteğe bağlı olarak bir Map<Book, List<Purchase>>.
+0

"stok sorunları dışında" kullanmak olmaz daha anılar/depolama alanına sahip yardımcı olacak? Demek istediğim, zaten Müşteri ve Kitap nesnelerim var ve daha fazla nesne eklemek bellek tüketiyor gibi görünüyor. Bellek/depolama alanı bugün endişe verici olabilir mi? –

+0

@hybpro sadece az miktarda ekstra bellek kullanımı eklerdi. Sınıf tanımının kendisi ihmal edilebilir miktarda bellek kullanır. Belleğin çoğunu kullanan nesneler (örnekler) ve bir Satın Alma sınıfı eklemek örnek başına yalnızca az miktarda ek bellek gereksinimi ekleyecektir, çünkü Satın Alma sınıfındaki çoğu alan, aksi takdirde Müşteri veya Kitapta mevcut olacaktır. sınıflar. Böylece yeni alanları eklemek yerine alanları taşıyorsunuz. Ekleyen esneklik genellikle buna değer - çok eski bir akıllı telefon gibi ciddi bellek sınırlı bir cihazda değilseniz. –

0

Hatta Müşteri sınıfı olan referans büyük değildir.

Müşteri ve birbirinden habersiz Kitabı sınıflarını hem tutun. Bunun yerine hızlı referansınız için haritaları koruyun. Örneğin.

Customer.java: - assignBook(Customer c, Book b) aracılığıyla

Map<Customer, List<Book>> customerToBooks; 
Map<Book, List<Customer>> bookToCustomers; 

Ve manipüle Bu haritalar ve returnBook(Customer c, Book b) yöntemleri

0

Bir Yapabileceğiniz şey şöyle kitap satın alma geçmişini kontrol müşterinin sınıfının içindeki listesini kontrol etmektir

public class Customer{ 
    public Set<Book> purchases = new HashSet<Book>(); 

    public void purchaseBook(Book b){ 
     purchases.add(b); 
    } 
} 

Orjinal sınıfı:

Veya aynı tür bir işlemi gerçekleştirebilirsiniz, ancak sınıfındaki Set sınıfındaki müşterilerle yapabilirsiniz.
İlgili konular