某电影院售票系统为不同类型的用户提供了不同的打折方式(Discount),学生凭学生证课享受8折优惠(StudentDiscount),儿童可享受减免10元的优惠(ChildrenDiscount),VIP用户除享受半价优惠还可以进行积分(VIPDiscount)。使用策略模式设计该系统。
package 策略模式;
public interface Discount {
public abstract double Calculate(double price);
}
package 策略模式;
public class StudentDiscount implements Discount {
@Override
public double Calculate(double price) {
return price*0.8;
}
}
package 策略模式;
public class ChildrenDiscount implements Discount {
@Override
public double Calculate(double price) {
return (price-10);
}
}
package 策略模式;
public class VIPDiscount implements Discount {
@Override
public double Calculate(double price) {
System.out.println("增加积分!");
return 0.5*price;
}
}
package 策略模式;
public class MovieTicket {
private Discount discount;
private double price;
public double getPrice() {
return discount.Calculate(this.price);
}
public void setPrice(double price) {
this.price = price;
}
public void SetDiscount(Discount discount){
this.discount=discount;
}
}
package 策略模式;
public class Test {
public static void main(String[] args) {
MovieTicket m=new MovieTicket();
m.setPrice(60.00);
double currentPrice;
Discount a;
a=new StudentDiscount();
m.SetDiscount(a);
currentPrice=m.getPrice();
System.out.println("学生票打折后价格为:"+currentPrice);
System.out.println("------------------------");
a=new ChildrenDiscount();
m.SetDiscount(a);
currentPrice=m.getPrice();
System.out.println("儿童票打折后价格为:"+currentPrice);
System.out.println("-----------------------");
a=new VIPDiscount();
m.SetDiscount(a);
currentPrice=m.getPrice();
System.out.println("VIP打折后价格为:"+currentPrice);
}
}
java设计模式练习自留。