银行系统设计

设计一个银行系统,使用设计模式来实现以下功能:
1创建银行账户。
2给银行账户存款。
3从银行账户取款。
4查询银行账户余额。要求如下:
使用工厂模式(Factory)创建银行账户对象。
使用单例模式(Singleton)创建银行服务对象,提供存款、取款、查询余额等服务。
使用观察者模式((Observer)实现当账户余额发生变化时通知观察者,例如发送短信通知用户。

设计模式:
工厂模式(Factory):用于创建银行账户对象,可以通过传入账户ID和账户名等参数来创建银行账户对象。
单例模式(Singleton):用于创建银行服务对象,确保只有一个银行服务对象被创建,可以提供唯一的存款、取款、查询余额等服务。
观察者模式(Observer):当账户余额发生变化时,可以通知观察者对象,例如发送短信通知用户,以便它们可以执行相应的操作。

相关类/接口定义:
AccountFactory类:银行账户工厂类,用于创建银行账户对象。
BankService类:银行服务类,采用单例模式,包含存款、取款、查询余额等服务。
AccountObserver类:观察者类,用于观察账户余额变化并执行相应的操作,例如发送短信通知用户。
BankAccount类:银行账户类,包含账号、账户名称、余额等要素。

// 银行账户类

public class BankAccount {

    private String id;

    private String name;

    private double balance;

    private List<AccountObserver> observers = new ArrayList<>();

    public BankAccount(String id, String name) {

        this.id = id;

        this.name = name;

    }

    public void deposit(double amount) {   

        balance += amount;

        notifyObservers();

    }

    public void withdraw(double amount) {

        if (balance >= amount) {

            balance -= amount;

            notifyObservers();

        }else {

            System.out.println("Insufficient balance");

        }

    }

    public double getBalance() {

        return balance;

    }

    public void addObserver(AccountObserver observer) {

        observers.add(observer);

    }

    private void notifyObservers() {

        for (AccountObserver observer : observers) {

            observer.update(this);

            }

        }

}

// 观察者接口

public interface AccountObserver{

    void update(BankAccount account);

}

// 具体观察者类

public class SMSNotifier implements AccountObserver {

    @Override

    public void update(BankAccount account) {

        System.out.println("Sending SMS to user with new balance: " + account.getBalance());
    }

}

// 银行服务类

public class BankService {

    private static BankService instance;

    private BankService() {}

    public static BankService getInstance() {

        if (instance == null) {

            instance = new BankService();

        }

        return instance;

}

    public BankAccount createAccount(String id, String name) {

           return new BankAccount(id, name);

        }

}

// 工厂类

public class AccountFactory {

    public BankAccount createAccount(String id, String name) {

         BankAccount account = BankService.getInstance().createAccount(id, name);

        account.addObserver(new SMSNotifier());

        return account;

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder_by

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值