任务二:使用策略模式设计电影票打折功能
某电影院售标系统为不同类型的用户提供了不同的打折方式(Discount),学生凭学生证可享受8折优惠**(StudentDiscount),儿童可享受减免10元的优惠(ChildrenDiscount),VIP用户除享受半价优惠外还可以进行积分(VIPDiscount)**。使用策略模式设计该系统。
UML-class
i
1
* @ClassName: Ticket * @Description: TODO * @Author ZSC * @Date 2023/12/4 11:32 * @Version 1.0 public class Ticket { private double price; private Discount discount; public double getPrice() { return discount.calculate(this.price); } public void setPrice(double price) { this.price = price; } public void setDiscount(Discount discount) { this.discount = discount; } }
2
public interface Discount {
public double calculate(double price);
}
3
@Override public double calculate(double price) { return price-10; } } public class StuDiscount implements Discount{ @Override public double calculate(double price) { return price*0.8; } } public class VIPDiscount implements Discount{ @Override public double calculate(double price) { System.out.println("提示:增加积分!"); return price*0.5; } }
4
public class TicketMain {
public static void main(String[] args) {
// discout
double disPrice;
Ticket ticket = new Ticket();
// set price
ticket.setPrice(66.66);
// stu
Discount stuDiscount = new StuDiscount();
ticket.setDiscount(stuDiscount);
disPrice = ticket.getPrice();
System.out.println("stu--折后价格为:"+disPrice);
// chil
Discount chilDiscount = new ChilDiscount();
ticket.setDiscount(chilDiscount);
disPrice = ticket.getPrice();
System.out.println("childen--折后票价为:"+disPrice);
System.out.println("==========================");
// VIP
Discount vipDiscount = new VIPDiscount();
ticket.setDiscount(vipDiscount);
disPrice = ticket.getPrice();
System.out.println("VIP会员---折后票价为:"+disPrice);
}
}
reference
【[参考文献]】