给我写一个程序,包含着三种方法
时间: 2024-10-12 17:10:36 浏览: 18
教你写一个云上Hello world小程序
当然,我可以帮你编写一个简单的Java程序示例,演示模板方法、观察者和代理三种设计模式。在这个例子中,我们将创建一个基础的银行账户,使用模板方法管理转账操作,同时利用观察者模式监控账户余额变化,最后使用代理模式处理账户的安全验证。
```java
// 模板方法 - 转账过程抽象
public abstract class BankAccount {
protected double balance;
public void transfer(double amount, Account target) {
if (amount <= 0 || amount > getBalance()) throw new IllegalArgumentException("Invalid transfer amount");
withdraw(amount); // 子类需要实现此方法
deposit(target.deposit(amount)); // 对方账户存款
}
// 定义模板方法的一部分,子类需要实现
protected abstract void withdraw(double amount);
protected double deposit(double amount) {
balance += amount;
return amount;
}
// 获取当前余额
public double getBalance() {
return balance;
}
}
// 观察者 - 监听账户余额变化
interface BalanceListener {
void onBalanceChange(BankAccount account);
}
class EmailNotifier implements BalanceListener {
@Override
public void onBalanceChange(BankAccount account) {
System.out.println("Balance changed, notified by email.");
}
}
// 实现模板方法 - 子类CheckingAccount
class CheckingAccount extends BankAccount {
@Override
protected void withdraw(double amount) {
System.out.println("Withdrawal of $" + amount + " from checking account.");
balance -= amount;
}
}
// 代理 - 安全账户
class SecureBankAccount extends CheckingAccount {
private final AccountValidator validator;
public SecureBankAccount(AccountValidator validator) {
this.validator = validator;
}
@Override
public void transfer(double amount, Account target) {
if (!validator.validateTransfer(amount)) throw new SecurityException("Transfer denied due to security checks.");
super.transfer(amount, target);
}
}
// 使用代理模式
public class Main {
public static void main(String[] args) {
AccountValidator validator = new Validator();
SecureBankAccount secureAccount = new SecureBankAccount(validator);
// 添加观察者
secureAccount.addObserver(new EmailNotifier());
secureAccount.transfer(100, new CheckingAccount());
}
}
```
在这个程序中,`SecureBankAccount` 类通过 `SecureBankAccount` 构造函数中的 `AccountValidator` 代理实现了转账操作的安全检查。`BalanceListener` 接口的实现者(如 `EmailNotifier`)作为观察者监听账户的变化。
阅读全文