我们现在看在checkout方法中究竟要使用要使用CodePromotion这个类提供的那些信息,首先可以肯定,getPromotionAmount这个方法是必需的,而且我们希望能够得知某一定但为什么要打折,所以getDescription这个方法也是一定要有的,而user()是对promotion code使用过后进行的处理。所以一个更好的方法是定义一个接口,checkout方法中的参数类型使这个接口,而不是ColdPromotion这个类,这样一来,无论是那种打折,我们都可以通过这个接口实现。我们需要做的就是让我们的新的打折类实现这个接口。下面就是这个接口的定义:
interface Promotable{
public float getPromotionAmount(float totalCharge)
public boolean isValidate()
public void use()
public String getDescription()
}
本来以为这样一来可以高枕无忧了,但是转念一想有多了一份担忧,如果某一天销售人员提出丧心病狂的要求,几种打折一起使用该如何是好?其实这个问题也是可以解决的,那就是我们在checkout中传递的甚至不是Promotable这个接口,而是一个vector或者Promotable的数组,在checkout之前,我们把所有的打折信息放入到这个Vector中,在checkout的过程中,遍历这个Vector(或者数组)。甚至我们可以写一个专门管理promotion的管理类,让他来完成各种打折信息的创建,计算出总的折扣,记录各种打折的原因,进行打折后的处理工作。具体如何实现就要根据个人的好恶了。
版权所有:idilent 网站转载请注明作者 其他转载方式请与作者联系(idilent@yahoo.com.cn)。