Builder模式抽取一个费用处理类 及多种调用使用
时间: 2024-01-27 12:06:14 浏览: 27
好的,以下是一个Java代码示例,演示如何使用Builder模式抽取一个费用处理类,并展示多种调用使用:
```
public class FeeProcessor {
private final int baseFee;
private final int extraFee;
private final int discount;
private FeeProcessor(Builder builder) {
this.baseFee = builder.baseFee;
this.extraFee = builder.extraFee;
this.discount = builder.discount;
}
public int calculateFee(int hours) {
int totalFee = baseFee + extraFee * hours;
if (discount > 0) {
totalFee -= totalFee * discount / 100;
}
return totalFee;
}
public static class Builder {
private int baseFee;
private int extraFee;
private int discount;
public Builder setBaseFee(int baseFee) {
this.baseFee = baseFee;
return this;
}
public Builder setExtraFee(int extraFee) {
this.extraFee = extraFee;
return this;
}
public Builder setDiscount(int discount) {
this.discount = discount;
return this;
}
public FeeProcessor build() {
return new FeeProcessor(this);
}
}
}
```
示例中,我们创建了一个`FeeProcessor`类和一个内部静态类`Builder`。`FeeProcessor`类有一个私有构造函数,只能通过`Builder`类来创建实例。`Builder`类有三个参数:baseFee,extraFee,discount,它们对应于`FeeProcessor`类的成员变量。
我们可以使用Builder模式来创建FeeProcessor实例,如下所示:
```
// 创建一个默认配置的FeeProcessor实例
FeeProcessor feeProcessor = new FeeProcessor.Builder().build();
// 创建一个自定义的FeeProcessor实例
FeeProcessor feeProcessor2 = new FeeProcessor.Builder()
.setBaseFee(10)
.setExtraFee(5)
.setDiscount(20)
.build();
```
第一个调用中,我们使用默认配置创建了一个`FeeProcessor`实例。第二个调用中,我们使用自定义配置创建了另一个实例。
我们还可以使用同一个`Builder`实例创建多个`FeeProcessor`实例,如下所示:
```
// 创建第一个FeeProcessor实例
FeeProcessor.Builder builder = new FeeProcessor.Builder()
.setBaseFee(10)
.setExtraFee(5)
.setDiscount(20);
FeeProcessor feeProcessor3 = builder.build();
// 创建第二个FeeProcessor实例
FeeProcessor feeProcessor4 = builder.build();
```
在这个示例中,我们先创建了一个`Builder`实例,并设置了一些参数。然后我们使用同一个`Builder`实例来创建两个不同的`FeeProcessor`实例。这种方法可以使我们更有效地重用代码,并且可以在创建多个实例时节省时间和资源。
总之,使用Builder模式可以使我们更容易地创建和配置对象,并且可以提高代码的可读性和可维护性。