已知 2025 级计科班级同学都是通过班长转交班费给老师。可以理解班长就是代理类(代理学生上 交班费),学生就是被代理类或者理解为目标类。请写出使用代理模式完成该活动及测试的 JAVA 代码
时间: 2024-10-27 22:15:01 浏览: 21
Net实战商用源码---asp.net班级班费管理系统源码
在Java中,我们可以使用代理模式(Proxy Pattern)来模拟班长代收班费的情况。代理模式允许我们在不改变原有学生(Target Class)接口的情况下,增加额外的功能或者控制访问。下面是一个简单的代理类(Proxy Class)和学生类(Target Class)的示例:
```java
// 定义学生接口
interface Student {
void payFee(double amount);
}
// 学生类实现学生接口
class RealStudent implements Student {
@Override
public void payFee(double amount) {
System.out.println("Real student pays " + amount + " yuan.");
}
}
// 代理类(班长)
class BankAccountManager extends RealStudent implements Student {
private double fee;
public BankAccountManager(Student realStudent) {
this.realStudent = realStudent;
}
// 支付费用的方法,记录并转发给真实的学生
@Override
public void payFee(double amount) {
fee += amount;
System.out.println("Bank account manager records: " + amount + " yuan.");
realStudent.payFee(amount); // 转交班费给真实的学生
}
// 获取累计收到的班费
public double getFee() {
return fee;
}
}
// 测试代码
public class Main {
public static void main(String[] args) {
// 创建真实的学生
RealStudent student = new RealStudent();
// 创建代理学生(班长)
BankAccountManager proxy = new BankAccountManager(student);
// 代理学生支付班费
proxy.payFee(100);
proxy.payFee(200);
// 输出代理收到的班费总额
System.out.println("Total fees collected by the bank account manager: " + proxy.getFee());
// 检查真实学生的支付是否已完成
System.out.println("Did the real student pay? " + (student.payFee(300) ? "Yes" : "No"));
}
}
```
在这个例子中,`BankAccountManager`是代理类,它负责记录班费并在适当的时候传递给`RealStudent`。在测试部分,我们能看到代理不仅处理了付款操作,还跟踪了总金额。
阅读全文