状态模式
状态模式的定义:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。将状态封装成为独立的类,并将动作委托到代表当前状态的对象。
状态接口:
1 public interface State { 2 public void insertQuarter(); 3 4 public void ejectQuarter(); 5 6 public void turnCrank(); 7 8 public void dispense(); 9 }
实现一个状态类:
public class NoQuarterState implements State { GumballMachine gumballMachine;//拥有状态的事物的引用 public NoQuarterState(GumballMachine gumballMachine){ this.gumballMachine = gumballMachine; } @Override public void insertQuarter() { System.out.println("You inserted a quarter!"); gumballMachine.setState(gumballMachine.getHasQuarterState()); } @Override public void ejectQuarter() { System.out.println("You haven't insert a quarter"); } @Override public void turnCrank() { System.out.println("You turned, but there's no quarter"); } @Override public void dispense() { System.out.println("You need to pay first"); } }
拥有状态的事物类:
1 public class GumballMachine { 2 3 State soldOutState; 4 State noQuarterState; 5 State hasQuarterState; 6 State soldState; 7 8 State state = soldOutState; 9 int count=0; 10 11 public GumballMachine(int numberGumballs){ 12 //构造方法的内容 13 } 14 15 void setState(State state){ 16 this.state = state; 17 } 18 19 public void insertQuarter(){ 20 state.insertQuarter(); 21 } 22 23 public void ejectQuarter(){ 24 state.ejectQuarter(); 25 } 26 27 public void turnCrank(){ 28 state.turnCrank(); 29 } 30 31 public void releaseBall(){ 32 System.out.println("A gumball comes rolling out the slot ..."); 33 if(count != 0){ 34 count--; 35 } 36 } 37 }

浙公网安备 33010602011771号