2012-01-27 86 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。