请给出 抽象策略类(Discount)、学生打折(StuDiscount)儿童打折(KidDiscount)环境类(Ticket)客户端(client)代码的实现
时间: 2024-01-16 19:02:42 浏览: 23
好的,以下是抽象策略类 Discount、学生打折 StuDiscount、儿童打折 KidDiscount、环境类 Ticket,以及客户端代码的实现。
```java
// 抽象策略类 Discount
public interface Discount {
double calculateDiscount(double price);
}
// 学生打折 StuDiscount
public class StuDiscount implements Discount {
@Override
public double calculateDiscount(double price) {
return price * 0.8;
}
}
// 儿童打折 KidDiscount
public class KidDiscount implements Discount {
@Override
public double calculateDiscount(double price) {
if (price >= 20) {
return price - 10;
} else {
return price;
}
}
}
// 环境类 Ticket
public class Ticket {
private Discount discount;
public void setDiscount(Discount discount) {
this.discount = discount;
}
public double getPrice(double price) {
if (discount == null) {
return price;
}
return discount.calculateDiscount(price);
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Ticket ticket = new Ticket();
// 学生打折
ticket.setDiscount(new StuDiscount());
double price1 = ticket.getPrice(100);
System.out.println("学生打折后的票价为:" + price1);
// 儿童打折
ticket.setDiscount(new KidDiscount());
double price2 = ticket.getPrice(15);
System.out.println("儿童打折后的票价为:" + price2);
}
}
```
在上面的代码中,我们定义了抽象策略类 Discount,以及两个具体的打折策略类 StuDiscount 和 KidDiscount。Ticket 类是环境类,其中包含一个 Discount 类型的成员变量 discount,并提供了一个 setDiscount 方法来设置打折策略。客户端代码中,我们创建了一个 Ticket 对象,并通过 setDiscount 方法设置不同的打折策略,然后调用 getPrice 方法来计算折扣后的票价。