JAVA設計模式:狀態模式
阿新 • • 發佈:2019-01-28
1 package study.designmode.statemode; 2 3 public class CandyMachine { 4 5 final static int SoldOutState = 0; //初始狀態 6 final static int OnReadyState = 1; //待機狀態 7 final static int HasCoin = 2; //準備狀態 8 final static int SoldState = 3; //售出狀態 9 10 private int state = SoldOutState; //變數,用於存放當前的狀態值 11 private int count = 0; //糖果的數目 12 13 public CandyMachine(int count) { 14 this.count = count; 15 if (count > 0) { 16 state = OnReadyState; 17 } 18 } 19 20 //投入硬幣行為的時候,通過判斷當前的狀態來匹配所有的狀態. 21 public void insertCoin() { 22switch (state) { 23 case SoldOutState: 24 System.out.println("you can't insert coin,the machine sold out!"); 25 break; 26 case OnReadyState: //只有在待機狀態的時候,投入硬幣行為正確,並將狀態改變為準備狀態 27 state = HasCoin; 28 System.out 29 .println("you have inserted a coin,next,please turn crank!");30 break; 31 case HasCoin: 32 System.out.println("you can't insert another coin!"); 33 34 break; 35 case SoldState: 36 System.out.println("please wait!we are giving you a candy!"); 37 38 break; 39 } 40 41 } 42 43 //回退硬幣 44 public void returnCoin() { 45 switch (state) { 46 case SoldOutState: 47 System.out 48 .println("you can't return,you haven't inserted a coin yet!"); 49 break; 50 case OnReadyState: 51 System.out.println("you haven't inserted a coin yet!"); 52 break; 53 case HasCoin: 54 55 System.out.println("coin return!"); 56 state = OnReadyState; 57 58 break; 59 case SoldState: 60 System.out.println("sorry,you already have turned the crank!"); 61 62 break; 63 } 64 65 } 66 67 //轉動曲柄 68 public void turnCrank() { 69 switch (state) { 70 case SoldOutState: 71 System.out.println("you turned,but there are no candies!"); 72 break; 73 case OnReadyState: 74 System.out.println("you turned,but you haven't inserted a coin!"); 75 break; 76 case HasCoin: 77 System.out.println("crank turn...!"); 78 state = SoldState; 79 dispense(); 80 break; 81 case SoldState: 82 System.out 83 .println("we are giving you a candy,turning another get nothing,!"); 84 break; 85 } 86 87 } 88 89 //觸發發放糖果行為 90 private void dispense() { 91 count = count - 1; 92 System.out.println("a candy rolling out!"); 93 if (count > 0) { 94 state = OnReadyState; 95 } else { 96 System.out.println("Oo,out of candies"); 97 state = SoldOutState; 98 } 99 100 } 101 102 public void printstate() { 103 104 switch (state) { 105 case SoldOutState: 106 System.out.println("***SoldOutState***"); 107 break; 108 case OnReadyState: 109 System.out.println("***OnReadyState***"); 110 break; 111 case HasCoin: 112 113 System.out.println("***HasCoin***"); 114 115 break; 116 case SoldState: 117 System.out.println("***SoldState***"); 118 break; 119 } 120 121 } 122 }