2012-01-27 117 views
-2

我該如何重構此代碼解決這個OOPS設計問題?Java組合設計問題

public class Book { 
     private String author; 
     private double price; 

     public setPrice(double price){ 
     this.price = price; 
     } 

     public getPrice(){ 
     return this.price; 
     } 
    } 

    public class DVD { 
     private String title; 
     private double price; 

     public setPrice(double price){ 
     this.price = price; 
     } 

     public getPrice(){ 
     return this.price; 
     } 
    } 


    public class BookAndDvd{ 
     private Book book; 
     private Dvd dvd; 
     private double price; 

     public setBook(Book book){ 
     this.book = book; 
     } 

     public setDvd(Dvd dvd){ 
     this.dvd = dvd; 
     } 
    } 

我想是重構,以便客戶端調用未啓用或getBook().setPrice()getDvd().setPrice()?因爲BookAndDvd類相結合的項目和單個組件不應該有一個價格

+1

這是功課嗎?如果是這樣,請標記爲這樣。 – javamonkey79 2012-01-27 20:46:59

+1

這將是很難爲客戶端調用'getBook()。setPrice()'或'getDvd()。setPrice()''時getBook()'和'getDvd()'不存在。 – 2012-01-27 20:51:29

+0

@ javamonkey79不是家庭作業問題這是一個面試問題 – 2012-01-27 23:16:55

回答

1

我會從其他的屬性,通過使一個單獨的類(稱爲SalableItem,例如)的價格分開保存一個價格和一個參考BookDVDBookAndDvd,或其他任何。 (當然,這意味着你還需要創建BookDVDBookAndDvd都可以實現一個接口。在實際的應用中你想要的是,無論如何,所以它處理的對象的商品代碼不必是專門用於每個不同類型的商品。)

使用一個單獨的類關聯與產品價格是有道理的,因爲它不是產品之類的標題或作者是一個固有的屬性。價格真的是該產品的存在在您的商店的屬性,這是什麼SalableItem類表示。

0

你可以設置一個標誌用戶是否同時具備。或者像if(hasBookAndDVDCheck)函數設置hasBoth標誌爲真,否則爲false。如果你的getter和setter中它是錯誤的,那麼拋出一個異常或者處理你喜歡的錯誤calll。

你應該包括以及干將/爲BookandDVD制定者

1

開始與接口:

public interface Priceable { 
    Money getPrice(); 
    void setPrice(Money price); 
} 

問題解決了。

只有當您有多個實現繼承時,纔會出現問題。你不用Java。