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 @   樱花开到我身边  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2022-10-29 继承与多态课后作业
2022-10-29 JAVA项目中的常用的异常处理情况总结
2022-10-29 动手动脑之异常处理
2022-10-29 10月读程序员小工到专家读后感第二篇
2022-10-29 10月读程序员小工到专家读后感第一篇
点击右上角即可分享
微信分享提示