qwb0614

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  187 随笔 :: 0 文章 :: 0 评论 :: 2048 阅读

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解状态模式的动机,掌握该模式的结构;

2、能够利用状态模式解决实际问题。

 
   

 


[实验任务一]:银行账户

用Java代码模拟实现课堂上的“银行账户”的实例,要求编写客户端测试代码模拟用户存款和取款,注意账户对象状态和行为的变化。

实验要求:

1. 提交源代码;

2. 注意编程规范。

复制代码
package ruanjiansheji.shiyan22;

public class Account {

    private AccountState state;
    private String owner;

    public Account(String owner, double init) {
        this.owner = owner;
        state = new GreenState(init, this);
        System.out.println("账户:" + this.owner + ",余额:" + init);

    }

    public void setState(AccountState state) {
        this.state = state;
    }

    /**
     * 存款
     * @param amount
     */
    public void deposit(double amount) {
        state.deposit(amount);
        System.out.println("现金余额为" + this.state.balance);
    }


    /**
     * 取款
     * @param amount
     */
    public void withdraw(double amount){
        state.withdraw(amount);
        System.out.println("现金余额为" + state.balance);
    }
}

package ruanjiansheji.shiyan22;

/**
 * 状态抽象类
 */
public abstract class AccountState {

    protected Account acc;
    protected double balance;

    public abstract void stateCheck();

    public abstract void deposit(double amount);

    public abstract void withdraw(double amount);
}

package ruanjiansheji.shiyan22;


public class GreenState extends AccountState {

    public GreenState() {}

    public GreenState(double amount, Account account) {
        balance = amount;
        acc = account;
    }

    @Override
    public void stateCheck() {
        if (balance >= 0) {
            acc.setState(new GreenState(balance, acc));
            System.out.println("当前为正常(绿色)状态");
        } else if(balance <0 && balance >= -1000) {
            acc.setState(new YellowState(balance, acc));
            System.out.println("当前为欠费(黄色)状态");
        } else {
            acc.setState(new RedState(balance, acc));
            System.out.println("当前透支(红色)状态");
        }

    }

    @Override
    public void deposit(double amount) {
        balance += amount;
        stateCheck();
    }

    @Override
    public void withdraw(double amount) {
        balance -= amount;
        stateCheck();
    }
}
package ruanjiansheji.shiyan22;

public class Main {
    public static void main(String[] args) {
        Account acc = new Account("gazikel", 2500);

        acc.deposit(1000);
        acc.deposit(2000);
        acc.withdraw(5000);
        acc.withdraw(6000);
        acc.deposit(6000);
    }
}


package ruanjiansheji.shiyan22;



public class RedState extends AccountState {

    public RedState(double amount, Account acc) {
        this.balance = amount;
        this.acc = acc;
    }
    @Override
    public void stateCheck() {
        if (balance >= 0) {
            acc.setState(new GreenState(balance, acc));
            System.out.println("当前为正常(绿色)状态");
        } else if(balance <0 && balance >= -1000) {
            acc.setState(new YellowState(balance, acc));
            System.out.println("当前为欠费(黄色)状态");
        } else {
            acc.setState(new RedState(balance, acc));
            System.out.println("当前透支(红色)状态");
        }

    }

    @Override
    public void deposit(double amount) {
        balance += amount;
        stateCheck();
    }

    @Override
    public void withdraw(double amount) {
        System.out.println("透支状态,无法取款!");
    }
}

package ruanjiansheji.shiyan22;

public class YellowState extends AccountState {

    public YellowState(double amount, Account acc) {
        this.balance = amount;
        this.acc = acc;
    }

    @Override
    public void stateCheck() {
        if (balance >= 0) {
            acc.setState(new GreenState(balance, acc));
            System.out.println("当前为正常(绿色)状态");
        } else if(balance <0 && balance >= -1000) {
            acc.setState(new YellowState(balance, acc));
            System.out.println("当前为欠费(黄色)状态");
        } else {
            acc.setState(new RedState(balance, acc));
            System.out.println("当前透支(红色)状态");
        }
    }

    @Override
    public void deposit(double amount) {
        balance += amount;
        stateCheck();

    }

    @Override
    public void withdraw(double amount) {
        balance -= amount;
        stateCheck();

    }
}
复制代码

 

posted on   嘎嘎鸭1  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示