12.22

 

 

实验 22:状态模式

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

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

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

 

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

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

实验要求:

1. 画出对应的类图

 

2. 提交源代码

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();

}

3注意编程规范。

 

 

posted @ 2024-12-22 23:04  混沌武士丞  阅读(17)  评论(0)    收藏  举报