zoukankan      html  css  js  c++  java
  • 2021.11.24(状态模式java)

    银行账户

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

    (1)Account.java

    package shiyan22;
    
    
    /**
    
    
     * @Description:环境类
    
    
     * @author 马荣荣
    
    
     *
    
    
     */
    
    
    public class Account {
    
    
    private AccountState state;
    
    
    private String owner;
    
    
    public Account(String a,double b){
    
    
    owner=a;
    
    
    state=new Yellowstate(this,b);
    
    
    state.stateCheck();
    
    
    }
    
    
    public void setsta(AccountState a){
    
    
    state=a;
    
    
    }
    
    
    public void deposit(double a){
    
    
    System.out.println(owner+"存"+a+"元");
    
    
    state.deposit(a);
    
    
    state.stateCheck();
    
    
    System.out.println();
    
    
    }
    
    
    public void withdraw(double a){
    
    
    System.out.println(owner+"取"+a+"元");
    
    
    state.withdraw(a);
    
    
    state.stateCheck();
    
    
    System.out.println();
    
    
    }
    
    
    }

    (2)AccountState.java

    package shiyan22;
    
    
    /**
    
    
     * @Description:抽象状态类
    
    
     * @author 马荣荣
    
    
     *
    
    
     */
    
    
    public abstract class AccountState {
    
    
    protected Account acc;
    
    
    protected double balance;
    
    
    public AccountState(Account a,double b){
    
    
    super();
    
    
    acc=a;
    
    
    balance=b;
    
    
    }
    
    
    public abstract void stateCheck();
    
    
    public void deposit(double amount) {
    
    
    balance+=amount;
    
    
    System.out.println("存款成功");
    
    
    System.out.println("余额为"+balance+"元");
    
    
    }
    
    
    public void withdraw(double amount) {
    
    
    if((balance-amount)>-1000) {
    
    
    System.out.println("取钱成功!");
    
    
    balance -= amount;
    
    
    System.out.println("当前余额:"+balance+"元");
    
    
    }else {
    
    
    System.out.println("余额不足!");
    
    
    System.out.println("当前余额:"+balance+"元");
    
    
    }
    
    
    }
    
    
    }
    

     (3)Client.java

    package shiyan22;
    
    
    public class Client {
    
    
    public static void main(String args[]){
    
    
    Account acc=new Account("账户20194021",200);
    
    
    acc.deposit(3000);
    
    
    acc.withdraw(1000);
    
    
    acc.withdraw(3500);
    
    
    }
    
    
    }

    (4)Greenstate.java

    package shiyan22;
    
    
    /**
    
    
     * @Description:正常状态类
    
    
     * @author 马荣荣
    
    
     *
    
    
     */
    
    
    public class Greenstate extends AccountState{
    
    
    public Greenstate(Account a,double b){
    
    
    super(a,b);
    
    
    }
    
    
    public void stateCheck(){
    
    
    if(balance<-1000){
    
    
    acc.setsta(new Redstate(acc,balance));
    
    
    }else if(balance>=-1000&&balance<0){
    
    
    acc.setsta(new Yellowstate(acc,balance));
    
    
    }
    
    
    }
    
    
    }

    (5)Redstate.java

    package shiyan22;
    
    
    /**
    
    
     * @Description:透支状态类
    
    
     * @author 马荣荣
    
    
     *
    
    
     */
    
    
    public class Redstate extends AccountState {
    
    
     
    
    
    public Redstate(Account acc, double balance) {
    
    
    super(acc, balance);
    
    
    }
    
    
     
    
    
    public void stateCheck() {
    
    
    if(balance >= -1000 && balance < 0){
    
    
    acc.setsta(new Yellowstate(acc, balance));
    
    
    }else if(balance >= 0){
    
    
    acc.setsta(new Greenstate(acc,balance));
    
    
    }
    
    
    }
    
    
    public void withdraw(double amount) {
    
    
    System.out.println("余额不足!");
    
    
    System.out.println("当前余额:"+balance);
    
    
    }
    
    
    }

    (6)Yellowstate.java

    package shiyan22;
    
    
    /**
    
    
     * @Description:欠费状态类
    
    
     * @author 马荣荣
    
    
     *
    
    
     */
    
    
    public class Yellowstate extends AccountState {
    
    
     
    
    
    public Yellowstate(Account acc, double balance) {
    
    
    super(acc, balance);
    
    
    }
    
    
     
    
    
    public void stateCheck() {
    
    
    if(balance >=0 ){
    
    
    acc.setsta(new Greenstate(acc,balance));
    
    
    }else if(balance < -1000){
    
    
    acc.setsta(new Redstate(acc,balance));
    
    
    }
    
    
    }
    
    
    }

    实现截图:

  • 相关阅读:
    bash快捷建-光标移到行首、行尾等
    VitualBox中linux系统ping ip能通域名不通的解决办法
    linux下使用tar命令
    Windows平台下Git服务器搭建
    android 在使用studio 编写百度地图中遇到APP Scode码校验失败 问题
    android 开发中 添加库文件 和so 文件的存放位置和添加依赖
    Volley之 JsonRequest 解析JSON 数据
    利用Volley封装好的图片缓存处理加载图片
    使用Volley执行网络数据传输
    android 测试 Monkey 和 MonkeyRunner 的使用
  • 原文地址:https://www.cnblogs.com/marr/p/15598872.html
Copyright © 2011-2022 走看看