2023/10/29 每日总结

今天完成了设计模式实验22

实验 22:状态模式

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

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

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

 

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

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

源代码

 

package org.test22;

import javafx.scene.media.AudioClip;

public class BankAccount{
    private State state;

    public BankAccount(State state) {
        this.state = state;
    }

    public void deposit(double amount) {
        state.deposit(amount);
    }

    public void withdraw(double amount) {
        if (state instanceof OpenState) {
            state.withdraw(amount);
        } else {
            System.out.println("账户已关闭,不能取款");
        }
    }

    public State getState() {
        return this.state;
    }
}



package org.test22;

public class Client {
    public static void main(String[] args) {
        OpenState openState = new OpenState();
        ClosedState closedState = new ClosedState();
        BankAccount openAccount = new BankAccount(openState);
        openAccount.deposit(500); // 存款 500 元
        openAccount.withdraw(200); // 取款 200 元,余额不足,不能取款
        openAccount.withdraw(500); // 取款 500 元,成功取出 300 元,余额为 500 - 300 = 200 元
        System.out.println("当前账户余额:" + openAccount.getState().getBalance());
        closedState.deposit(5000);
    }
}





package org.test22;

public class ClosedState extends State{
    private double balance=0;
    @Override
    public void deposit(double amount) {

        System.out.println("账户已关闭,不能存款");
    }

    @Override
    public void withdraw(double amount) {
        System.out.println("账户已关闭,不能取款");
    }

    @Override
    public double getBalance() {
        return this.balance;
    }
}





package org.test22;

public class OpenState extends State{
    private double balance=0;
    @Override
    public void deposit(double amount) {
        System.out.println("存款成功,存款金额:" + amount);
        balance+=amount;
    }

    @Override
    public void withdraw(double amount) {
        if (balance-amount>=0) {
            System.out.println("取款成功,取款金额:" + amount);
            balance-=amount;

        } else {
            System.out.println("余额不足,不能取款");
        }
    }

    @Override
    public double getBalance() {
        return this.balance;
    }
}


package org.test22;

public abstract class State {
    public abstract void deposit(double amount);
    public abstract void withdraw(double amount);
    public abstract double getBalance();
}

 

posted @ 2023-10-29 15:10  樱花开到我身边  阅读(19)  评论(0)    收藏  举报