ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

状态模式(java)

2021-11-24 17:01:28  阅读:110  来源: 互联网

标签:acc 状态 java System 模式 println balance public out


银行账户

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


}


}


}

 

实现截图:

 

 

标签:acc,状态,java,System,模式,println,balance,public,out
来源: https://www.cnblogs.com/marr/p/15598872.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有