1. 程式人生 > >JAVA設計模式:狀態模式

JAVA設計模式:狀態模式

  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() { 22
switch (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 }