MovieTicket充当环境角色类,Discount充当抽象策略类,StudentDiscount,ChildDiscount和VipDiscount充当具体策略类。 (1)MovieTicket:电影票类,充当环
时间: 2024-09-19 07:16:22 浏览: 20
境中的主角,它有一个或多个方法(如`purchase()`),用于购买电影票。这个类需要能够接受不同的折扣策略来进行票价计算。例如:
```java
public class MovieTicket {
private Discount discountStrategy;
public MovieTicket(Discount discount) {
this.discountStrategy = discount;
}
public void purchase(int ticketPrice) {
int discountedPrice = discountStrategy.calculateDiscountedPrice(ticketPrice);
// 其他操作,如打印优惠信息
System.out.println("购票价格为:" + discountedPrice);
}
}
```
在这个场景中,`Discount`是一个抽象策略类,它定义了如何计算折扣价的行为:
```java
public abstract class Discount {
public abstract int calculateDiscountedPrice(int price);
}
```
而`StudentDiscount`, `ChildDiscount`, 和 `VipDiscount` 是具体的策略类,它们分别实现了`Discount`并提供各自的打折规则:
```java
public class StudentDiscount extends Discount {
@Override
public int calculateDiscountedPrice(int price) {
return price * 0.8; // 学生享受8折优惠
}
}
public class ChildDiscount extends Discount {
@Override
public int calculateDiscountedPrice(int price) {
return price * 0.5; // 儿童享受半价优惠
}
}
public class VipDiscount extends Discount {
@Override
public int calculateDiscountedPrice(int price) {
return price * 0.9; // 贵宾享受9折优惠
}
}
```
用户可以根据实际情况选择不同的`Discount`实例传递给`MovieTicket`,从而动态地改变购票策略。
阅读全文