状态模式(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));


}


}


}

 

实现截图:

状态模式(java)

 

 

上一篇:python面向对象——私有属性


下一篇:【JDBC】笔记(4)--- JDBC 事务自动提交机制;账户转账演示事务代码(bug版+修正版)