Answer:
Java Code was used to define classes in the abstract discount policy,The bulk discount, The buy items get one free and the combined discount
Explanation:
Solution
Code:
Main.java
public class Main {
public static void main(String[] args) {
BulkDiscount bd=new BulkDiscount(10,5);
BuyNItemsGetOneFree bnd=new BuyNItemsGetOneFree(5);
CombinedDiscount cd=new CombinedDiscount(bd,bnd);
System.out.println("Bulk Discount :"+bd.computeDiscount(20, 20));
System.out.println("Nth item discount :"+bnd.computeDiscount(20, 20));
System.out.println("Combined discount :"+cd.computeDiscount(20, 20));
}
}
discountPolicy.java
public abstract class DiscountPolicy
{
public abstract double computeDiscount(int count, double itemCost);
}
BulkDiscount.java
public class BulkDiscount extends DiscountPolicy
{
private double percent;
private double minimum;
public BulkDiscount(int minimum, double percent)
{
this.minimum = minimum;
this.percent = percent;
}
at Override
public double computeDiscount(int count, double itemCost)
{
if (count >= minimum)
{
return (percent/100)*(count*itemCost); //discount is total price * percentage discount
}
return 0;
}
}
BuyNItemsGetOneFree.java
public class BuyNItemsGetOneFree extends DiscountPolicy
{
private int itemNumberForFree;
public BuyNItemsGetOneFree(int n)
{
itemNumberForFree = n;
}
at Override
public double computeDiscount(int count, double itemCost)
{
if(count > itemNumberForFree)
return (count/itemNumberForFree)*itemCost;
else
return 0;
}
}
CombinedDiscount.java
public class CombinedDiscount extends DiscountPolicy
{
private DiscountPolicy first, second;
public CombinedDiscount(DiscountPolicy firstDiscount, DiscountPolicy secondDiscount)
{
first = firstDiscount;
second = secondDiscount;
}
at Override
public double computeDiscount(int count, double itemCost)
{
double firstDiscount=first.computeDiscount(count, itemCost);
double secondDiscount=second.computeDiscount(count, itemCost);
if(firstDiscount>secondDiscount){
return firstDiscount;
}else{
return secondDiscount;
}
}
}