状态模式
package tutor22; public class Client { public static void main(String args[]){ Account acc=new Account("ZY",100); acc.deposit(500); acc.withdraw(300); acc.withdraw(400); } } 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(); } } 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+"元"); } } } 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)); } } } 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); } } 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)); } } }